Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード Twitter

2013-10-17

iOS 7 で使えるフォント名一覧

iOS 7 の隠しフォント, ヒラギノ角ゴ W1/W2 を CSS で指定する』という記事を読んで、「あれ、これってPrivate APIにあたるんじゃない?」と思いフォント名一覧を出力してみたので、そのついでにその一覧をここに掲載しておきます。


(追記2013/10/17その1)

iOS7で追加されたフォント、iOS6で追加されたフォントがわかるよう色分けしました。


(追記2013/10/17その2)

iOS7の新機能のサンプルコード集、『iOS7 Sampler』 で新フォントを確認できるようにしました。


f:id:shu223:20131017212209p:image:w240


サンプルコードを提供されてもビルドできない!というデザイナーやディレクターの方は、ぜひお近くの開発者に実機インストールしてもらってみてください。

(追記ここまで)


何に使うのか?

self.hogeLabel.font = [UIFont fontWithName:@"Helvetica Bold Oblique" size:10.0];

みたいな感じでシステムフォント以外の UIFont を使う場合にこのフォント名が必要になります。


どうやって出力したのか?

UIFont の familyNames メソッドと、fontNamesForFamilyName: メソッドを使います。

NSMutableString *str = @"".mutableCopy;
for (NSString *familyName in [UIFont familyNames]) {
    [str appendFormat:@"<b>%@</b>\n\n", familyName];
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        [str appendFormat:@"- %@\n", fontName];
    }
    [str appendFormat:@"\n"];
}
NSLog(@"%@", str);

(ここに貼り付ける用にHTML+はてな記法で出力してます)


一覧

合計でファミリー数が71、フォント数が236でした。


iOS7で追加されたフォントに (iOS7) 、 iOS6で追加されたフォントに (iOS6) というマークを付けてあります(iOS5, iOS6, iOS7のリストを出力して比較するコードを書きました)。


Thonburi

  • Thonburi-Bold
  • Thonburi
  • Thonburi-Light (iOS7)

Snell Roundhand

  • SnellRoundhand-Black
  • SnellRoundhand-Bold
  • SnellRoundhand

Academy Engraved LET

  • AcademyEngravedLetPlain

Marker Felt

  • MarkerFelt-Thin
  • MarkerFelt-Wide

Avenir (iOS6)

  • Avenir-Heavy (iOS6)
  • Avenir-Oblique (iOS6)
  • Avenir-Black (iOS6)
  • Avenir-Book (iOS6)
  • Avenir-BlackOblique (iOS6)
  • Avenir-HeavyOblique (iOS6)
  • Avenir-Light (iOS6)
  • Avenir-MediumOblique (iOS6)
  • Avenir-Medium (iOS6)
  • Avenir-LightOblique (iOS6)
  • Avenir-Roman (iOS6)
  • Avenir-BookOblique (iOS6)

Geeza Pro

  • GeezaPro-Bold
  • GeezaPro
  • GeezaPro-Light (iOS7)

Arial Rounded MT Bold

  • ArialRoundedMTBold

Trebuchet MS

  • Trebuchet-BoldItalic
  • TrebuchetMS
  • TrebuchetMS-Bold
  • TrebuchetMS-Italic

Arial

  • ArialMT
  • Arial-BoldItalicMT
  • Arial-ItalicMT
  • Arial-BoldMT

Marion

  • Marion-Regular
  • Marion-Italic
  • Marion-Bold

Menlo (iOS7)

  • Menlo-BoldItalic (iOS7)
  • Menlo-Regular (iOS7)
  • Menlo-Bold (iOS7)
  • Menlo-Italic (iOS7)

Malayalam Sangam MN

  • MalayalamSangamMN
  • MalayalamSangamMN-Bold

Kannada Sangam MN

  • KannadaSangamMN
  • KannadaSangamMN-Bold

Gurmukhi MN

  • GurmukhiMN-Bold
  • GurmukhiMN

Bodoni 72 Oldstyle

  • BodoniSvtyTwoOSITCTT-BookIt
  • BodoniSvtyTwoOSITCTT-Bold
  • BodoniSvtyTwoOSITCTT-Book

Bradley Hand

  • BradleyHandITCTT-Bold

Cochin

  • Cochin-Bold
  • Cochin-BoldItalic
  • Cochin-Italic
  • Cochin

Sinhala Sangam MN

  • SinhalaSangamMN
  • SinhalaSangamMN-Bold

Hiragino Kaku Gothic ProN

  • HiraKakuProN-W6
  • HiraKakuProN-W3

Iowan Old Style (iOS7)

  • IowanOldStyle-Bold (iOS7)
  • IowanOldStyle-BoldItalic (iOS7)
  • IowanOldStyle-Italic (iOS7)
  • IowanOldStyle-Roman (iOS7)

Damascus (iOS7)

  • DamascusBold (iOS7)
  • Damascus (iOS7)
  • DamascusMedium (iOS7)
  • DamascusSemiBold (iOS7)

Al Nile (iOS7)

  • AlNile-Bold (iOS7)
  • AlNile (iOS7)

Farah (iOS7)

  • Farah (iOS7)

Papyrus

  • Papyrus-Condensed
  • Papyrus

Verdana

  • Verdana-BoldItalic
  • Verdana-Italic
  • Verdana
  • Verdana-Bold

Zapf Dingbats

  • ZapfDingbatsITC

DIN Condensed (iOS7)

  • DINCondensed-Bold (iOS7)

Avenir Next Condensed (iOS6)

  • AvenirNextCondensed-Regular (iOS6)
  • AvenirNextCondensed-MediumItalic (iOS6)
  • AvenirNextCondensed-UltraLightItalic (iOS6)
  • AvenirNextCondensed-UltraLight (iOS6)
  • AvenirNextCondensed-BoldItalic (iOS6)
  • AvenirNextCondensed-Italic (iOS6)
  • AvenirNextCondensed-Medium (iOS6)
  • AvenirNextCondensed-HeavyItalic (iOS6)
  • AvenirNextCondensed-Heavy (iOS6)
  • AvenirNextCondensed-DemiBoldItalic (iOS6)
  • AvenirNextCondensed-DemiBold (iOS6)
  • AvenirNextCondensed-Bold (iOS6)

Courier

  • Courier
  • Courier-Oblique
  • Courier-BoldOblique
  • Courier-Bold

Hoefler Text

  • HoeflerText-Regular
  • HoeflerText-BlackItalic
  • HoeflerText-Italic
  • HoeflerText-Black

Euphemia UCAS

  • EuphemiaUCAS
  • EuphemiaUCAS-Bold
  • EuphemiaUCAS-Italic

Helvetica

  • Helvetica-Oblique
  • Helvetica-Light
  • Helvetica-Bold
  • Helvetica
  • Helvetica-BoldOblique
  • Helvetica-LightOblique

Hiragino Mincho ProN

  • HiraMinProN-W6
  • HiraMinProN-W3

Bodoni Ornaments

  • BodoniOrnamentsITCTT

Superclarendon (iOS7)

  • Superclarendon-Regular (iOS7)
  • Superclarendon-BoldItalic (iOS7)
  • Superclarendon-Light (iOS7)
  • Superclarendon-BlackItalic (iOS7)
  • Superclarendon-Italic (iOS7)
  • Superclarendon-LightItalic (iOS7)
  • Superclarendon-Bold (iOS7)
  • Superclarendon-Black (iOS7)

Mishafi (iOS7)

  • DiwanMishafi (iOS7)

Optima

  • Optima-Regular
  • Optima-Italic
  • Optima-Bold
  • Optima-BoldItalic
  • Optima-ExtraBlack

Gujarati Sangam MN

  • GujaratiSangamMN-Bold
  • GujaratiSangamMN

Devanagari Sangam MN

  • DevanagariSangamMN
  • DevanagariSangamMN-Bold

Apple Color Emoji

  • AppleColorEmoji

Savoye LET (iOS7)

  • SavoyeLetPlain (iOS7)

Kailasa

  • Kailasa
  • Kailasa-Bold

Times New Roman

  • TimesNewRomanPS-BoldItalicMT
  • TimesNewRomanPSMT
  • TimesNewRomanPS-BoldMT
  • TimesNewRomanPS-ItalicMT

Telugu Sangam MN

  • TeluguSangamMN
  • TeluguSangamMN-Bold

Heiti SC

  • STHeitiSC-Medium
  • STHeitiSC-Light

Apple SD Gothic Neo

  • AppleSDGothicNeo-Thin (iOS7)
  • AppleSDGothicNeo-SemiBold (iOS7)
  • AppleSDGothicNeo-Medium
  • AppleSDGothicNeo-Regular (iOS7)
  • AppleSDGothicNeo-Bold
  • AppleSDGothicNeo-Light (iOS7)

Futura

  • Futura-Medium
  • Futura-CondensedMedium
  • Futura-MediumItalic
  • Futura-CondensedExtraBold

Bodoni 72

  • BodoniSvtyTwoITCTT-Book
  • BodoniSvtyTwoITCTT-Bold
  • BodoniSvtyTwoITCTT-BookIta

Baskerville

  • Baskerville-Bold
  • Baskerville-SemiBoldItalic
  • Baskerville-BoldItalic
  • Baskerville
  • Baskerville-SemiBold
  • Baskerville-Italic

Symbol (iOS6)

  • Symbol (iOS6)

Heiti TC

  • STHeitiTC-Medium
  • STHeitiTC-Light

Copperplate

  • Copperplate
  • Copperplate-Light
  • Copperplate-Bold

Party LET

  • PartyLetPlain

American Typewriter

  • AmericanTypewriter-Light
  • AmericanTypewriter-CondensedLight
  • AmericanTypewriter-CondensedBold
  • AmericanTypewriter
  • AmericanTypewriter-Condensed
  • AmericanTypewriter-Bold

Chalkboard SE

  • ChalkboardSE-Light
  • ChalkboardSE-Regular
  • ChalkboardSE-Bold

Avenir Next (iOS6)

  • AvenirNext-MediumItalic (iOS6)
  • AvenirNext-Bold (iOS6)
  • AvenirNext-UltraLight (iOS6)
  • AvenirNext-DemiBold (iOS6)
  • AvenirNext-HeavyItalic (iOS6)
  • AvenirNext-Heavy (iOS6)
  • AvenirNext-Medium (iOS6)
  • AvenirNext-Italic (iOS6)
  • AvenirNext-UltraLightItalic (iOS6)
  • AvenirNext-BoldItalic (iOS6)
  • AvenirNext-Regular (iOS6)
  • AvenirNext-DemiBoldItalic (iOS6)

Bangla Sangam MN

  • BanglaSangamMN
  • BanglaSangamMN-Bold

Noteworthy

  • Noteworthy-Bold
  • Noteworthy-Light

Zapfino

  • Zapfino

Tamil Sangam MN

  • TamilSangamMN
  • TamilSangamMN-Bold

Chalkduster

  • Chalkduster

Arial Hebrew

  • ArialHebrew-Bold
  • ArialHebrew-Light (iOS7)
  • ArialHebrew

Georgia

  • Georgia-BoldItalic
  • Georgia-Bold
  • Georgia-Italic
  • Georgia

Helvetica Neue

  • HelveticaNeue-BoldItalic
  • HelveticaNeue-Light
  • HelveticaNeue-Italic
  • HelveticaNeue-UltraLightItalic
  • HelveticaNeue-CondensedBold
  • HelveticaNeue-MediumItalic (iOS7)
  • HelveticaNeue-Thin (iOS7)
  • HelveticaNeue-Medium
  • HelveticaNeue-Thin_Italic (iOS7)
  • HelveticaNeue-LightItalic
  • HelveticaNeue-UltraLight
  • HelveticaNeue-Bold
  • HelveticaNeue
  • HelveticaNeue-CondensedBlack

Gill Sans

  • GillSans
  • GillSans-Italic
  • GillSans-BoldItalic
  • GillSans-Light
  • GillSans-LightItalic
  • GillSans-Bold

Palatino

  • Palatino-Roman
  • Palatino-Italic
  • Palatino-Bold
  • Palatino-BoldItalic

Courier New

  • CourierNewPSMT
  • CourierNewPS-BoldMT
  • CourierNewPS-ItalicMT
  • CourierNewPS-BoldItalicMT

Oriya Sangam MN

  • OriyaSangamMN
  • OriyaSangamMN-Bold

Didot

  • Didot-Bold
  • Didot-Italic
  • Didot

DIN Alternate (iOS7)

  • DINAlternate-Bold (iOS7)

Bodoni 72 Smallcaps

  • BodoniSvtyTwoSCITCTT-Book

過去のiOSバージョンとの比較

同じコードをiOS5と、iOS6でも実行してみました。

Version Families Fonts
iOS5.1 58 163
iOS6.1 61 199
iOS7.0 71 236

だいぶ数が増えたようです。



参考までに、下記記事は iOS5 の頃に同様の方法で一覧を出力したものです。


UIFont の fontName 一覧



2013-10-15

AppSocially SDK が CocoaPods に対応しました

先日紹介した AppSocially SDK を、CocoaPods から導入できるようにしました。これにより、 スクリプトを1行書いて、コマンドを1つ実行するだけ で AppSocially SDK を使えるようになりました。


Podfile に

pod 'AppSociallySDK'

と書き足して、あとはターミナルから下記コマンドを実行するだけです。

pod install

ソース非公開の自作フレームワークのPodSpec

AppSocially SDK はソースは公開しておらず、AppSocially.framework, AppSocially.bundle だけを配布しているのですが、そういうケースで PodSpec をどう書いてよいかわからず、かなり試行錯誤しました。


最終的に、下記のようにしました。(nameとかversion等の部分はここでは省略)

s.source       = { :git => "https://github.com/appsocially/AppSocially-iOS-SDK.git", 
:tag => "release-0.8.1" }
s.resources = "AppSociallySDK/AppSocially.bundle"

s.frameworks = 'AddressBook', 'AddressBookUI', 'CFNetwork', 'MessageUI', 'MobileCoreServices', 'QuartzCore', 'Security', 'SystemConfiguration'
s.weak_frameworks = 'Accounts', 'Social'
s.libraries = 'iconv', 'xml2', 'resolv'

s.preserve_paths = "AppSociallySDK/AppSocially.framework"
s.public_header_files = "AppSociallySDK/AppSocially.framework/**/*.h"
s.vendored_frameworks = 'AppSociallySDK/AppSocially.framework'

s.requires_arc = true
s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2', 'OTHER_LDFLAGS' => '-ObjC -all_load'}

参考



2013-10-07

TwilioハッカソンとArduinoワークショップに参加してきました

週末は予定を入れないとKindleで延々とマンガを買っては読み続けてしまうので、手を動かせるハッカソンとか興味ある分野のワークショップにはなるべく参加するようにしてます。


で、先週末参加したのがタイトルにある2つ。


それぞれ振り返り、所感など。


Twilioハッカソン

もともとTwilioについては「確かSMS送れるAPIだよね」(電話は知らなかった)ぐらいの認識しかなく、週末ダラダラするよりは、ぐらいの感覚で参加したのですが、結果的に参加してすごくよかったです。


何が良かったって、僕はiOSしかできない不完全なプログラマーで、サーバーサイドやObjective-C以外の別言語はずっと避け続けてきたのですが、TwilioはiOS向けSDKに同梱されているサンプルアプリを動かすだけでもサーバーサイドの実装が不可欠で、強制的にその辺りを勉強せざるを得なくなったことです。


最初はどこかのレンタルサーバーを借りて、チュートリアルに書いてある PHP のコードをアップしてみようと思ったのですが、今後しばらくは iOS 及びクライアントサイドに軸足を置き続けることを考えると、Parse でサクッとサーバーサイドを書けるようになっといた方がいいんじゃないか と思い、Twilio のサーバーサイドを Parse でやる方法を模索することにしました。


で、ハッカソン中に書いたのがこちらの2記事。


自分は JavaScript も node.js もわからないので、問題解決の見通しを立てにくく、大変苦労しました。JS および node.js ぐらいはかじっとこうと強く思いました。


Arduino ワークショップ

日曜に参加した Arduino ワークショップは、音声合成LSI + スピーカーを使い、Arduino から AquesTalk というライブラリを使ってしゃべらせる、というものでした。


自分の Arduino 経験は、2週間前に一度「Lチカ」させてみた程度です。


(2013年9月22日の記念すべき初Lチカ)


収穫としては、なんとなくぼんやり興味のあった電子工作/フィジカルコンピューティングの分野について、自分はこういうことには興味ある/ない、といった方向性が見えてきたこと。


このへんも引き続き勉強していこうと思います。


寿司

アメリカに行く前に鎌倉のアパートは退去してしまったので、今は一時的に妻の実家(福島)に滞在しており、都内に出るたびに違うところに泊まるようにしてます。


今回は築地。


今朝、AM5:30に築地市場に行き、


f:id:shu223:20131007053032j:image:w400



寿司をいただいてきました。


f:id:shu223:20131007060909j:image:w400

大和寿司


うまかったです。



2013-10-06

TwilioのサーバーサイドをParseで実装する

Twilio クライアント for iOS クイックスタート チュートリアル』を見ると、サーバーサイドを PHP で書いてあるのですが、レンタルサーバーも借りてないし、ちょっと試したいだけなので Parse でできないかな、とやり方をいろいろ模索してみました。


関連記事:Parseにサーバーサイドのコードを書いてiOSアプリから呼ぶ


方法1: Twilio-node moduleを使う

Cloud Code に次のようなメソッドを用意して、

var twilio = require("twilio");
twilio.initialize("myAccountSid","myAuthToken");
 
Parse.Cloud.define("send_sms", function(request, response) {
  twilio.sendSMS({
    From: "+81xxxxxxxx",
    To: request.params.number,
    Body: "This message is sent from Twilio!"
  }, {
    success: function(httpResponse) { response.success("SMS sent!"); },
    error: function(httpResponse) { response.error("Uh oh, something went wrong"); }
  });
});

iOSアプリ側から次のようにコールします。

[PFCloud callFunctionInBackground:@"send_sms"
                   withParameters:@{@"number": @"+81xxxxxxx"}
                            block:^(NSString *result, NSError *error) {
                                
                                if (error) {
                                    
                                    NSLog(@"error:%@", error);
                                }
                                else {
                                    
                                    NSLog(@"result:%@", result);
                                }
                            }];

(参考ページ:Get Started with Twilio and Parse Using the Twilio Cloud Module


上記はSMSを送るサンプルですが、電話をかけたり等、twilio-node モジュールを使った色々なサンプルが下記にあります。


http://twilio.github.io/twilio-node/



方法2: Twilio SDK for iOSを使う

Parse 上の twilio-node モジュールを使って Capability Token をつくり、あとはクライアント側のSDKで処理します。


Cloud Code側で下記のように実装します。

var twilio = require("twilio");
twilio.initialize("myAccountSid","myAuthToken");
var capability = new twilio.Capability("myAccountSid","myAuthToken");
capability.allowClientIncoming("myAppSid");
var token = capability.generate();

Parse.Cloud.define("get_capability", function(request, response) {
  response.success(token);
});

アプリ側では、次のように実装します。

[PFCloud callFunctionInBackground:@"get_capability"
                   withParameters:@{}
                            block:^(NSString *capabilityToken, NSError *error) {
                                
                                if (error) {
                                    
                                    NSLog(@"error:%@", error);
                                }
                                else {
                                    
                                    NSLog(@"capabilityToken:%@", capabilityToken);
                                }
                            }];

この方法だと、SDKについてるBasicPhoneとかのサンプルコードを流用できるので、手っ取り早く電話アプリとかをつくって試したいときにはこっちの方がいいかもしれません。



2013-10-05

Parseにサーバーサイドのコードを書いてiOSアプリから呼ぶ

f:id:shu223:20131007134140p:image:w580


Parse はデータ置いてアクセスしたりプッシュ通知とばすだけじゃなくて、Cloud Code という機能でサーバーサイドのスクリプトも書けるということで、試してみました。


以下、ローカルで生成した JavaScript のコードをデプロイし、iOSアプリから呼んでみる までの手順のメモです。


1. 準備

  • Parseダッシュボードからアプリをつくっておく
  • コマンドラインツールをインストールする
$ curl -s https://www.parse.com/downloads/cloud_code/installer.sh | sudo /bin/bash

2. Parse newコマンドを実行する

$ parse new MyCloudCode

EmailとPasswordを求められるので、入力する。

GitHubとかでサインアップした場合、Passwordがないので、ParseのダッシュボードのAccount->Editで設定しておく。

認証に成功すると、

1:MyAppA

2:MyAppB

Select an App:

みたいな感じでどのアプリにするか聞かれるので、番号を入力する。

成功すると、下記フォルダ/ファイルが自動生成される。

  • config/
    • global.json
  • cloud/
    • main.js
  • public/
    • index.html

3. デプロイする

cloud/main.js にはHello world的なコードが入ってるので、すぐにデプロイして試せる。

$ cd MyCloudCode
$ parse deploy

成功すると、ダッシュボードの Cloud Code タブで main.js の内容を確認できる。


ちなみにこんなコード。

Parse.Cloud.define("hello", function(request, response) {
  response.success("Hello world!");
});

4. コマンドラインからたたいてみる

curlコマンドからmain.jsに実装されているhello関数を呼ぶ。

curl -X POST \
  -H "X-Parse-Application-Id: {Application ID}" \
  -H "X-Parse-REST-API-Key: {REST API Key}" \
  -H "Content-Type: application/json" \
  -d '{}' \
  https://api.parse.com/1/functions/hello

こういうレスポンスが返ってくる。

{

"result": "Hello world!"

}


5. iOSアプリからたたいてみる

iOSアプリへParse SDKを導入する

下記クイックスタートガイドに丁寧な手順が書かれています。


https://www.parse.com/apps/quickstart


簡単に書くと、

  • Parse.frameworkを追加する
  • 依存フレームワークを追加する
  • APIキーとかをセットするメソッドを呼ぶ

こんな感じです。


実装した関数を呼ぶ

PFCloud の callFunctionInBackground:withParameters: メソッドを使用します。

[PFCloud callFunctionInBackground:@"hello"
                   withParameters:@{}
                            block:^(NSString *result, NSError *error) {
                                
                                if (error) {
                                    
                                    NSLog(@"error:%@", error);
                                }
                                else {
                                    
                                    NSLog(@"result:%@", result);
                                }
                            }];

参考資料



2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2018 | 02 |