xcode7でNullabilityを定義 したヘッダにblocksをtypedef定義したらエラーが出た

typedef (^ SimpleBlock) (id obj); とかをconfig的な場所で定義して、いろんな場所で使っていた。 たまたまヘッダーファイルをがっつりいじる機会があったので、nonnullとかnullableとかも書いて、ヘッダの上の方で定義していたので存在を忘れていた。 そのままコンパイルしたらワーニングが出ていた。 pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) あ、すみません。と思ってnullableと書いてコンパイルしたらエラー。 unknown type name 'nullable' expected ')' こんな感じでいくつか。 結論は最初のワーニングに書いてあって、この通りに書けばよかった。 1. _Nonnull 2. _Nullable 3. _Null_unspecified つまりこんな。 typedef (^ SimpleBlock) (_Nulla

iOS7,8,9のアプリケーションライフサイクル

以前に作ったアプリがiOS9でうまく動かないという連絡を受けたので調査した結果、アプリケーションのライフサイクルが変更されたことによりイベントトリガと描画の関係が前後するというしょぼいミスをしていました。 悔しいので変化をまとめました。 具体的な問題の原因となった箇所はこちら。詳細は下のライフサイクルを見たらわかります。 -[AppDelegate applicationDidBecomeActive:] 検証したアプリの画面構成 1. UINavigationController 2. FirstViewController 3. SecondViewController(FirstViewController.navigationControllerにpushされる) iOS7 (7.1.2 // 起動 -[FirstViewController awakeFromNib] -[AppDelegate application:willFinishLaunchingWithOptions:] -[AppDelegate application:d

Xcode7からのBundle Identifier定義

--- 追記@2016/12/6 こっちにXcode8での設定方法を書きました --- 追記ここまで Xcode6系まではinfo.plistで直接定義する形だったけど Xcode7からはProjectファイルで定義するようになって、info.plistのbundle identifierの項目はこんな感じになっていた(Xcodeのマイグレーションをするとこうなるということで。 $(PRODUCT_BUNDLE_IDENTIFIER) メリット ビルド設定(Build Configuration)でバンドルIDが変更できるようになった。 Debugビルド、Releaseビルド、AdHocビルドなどでバンドルIDが変更できるのでターゲットを無駄に追加する必要が無くなった。 デメリット 理解していない人がinfo.plistを書き換えたら死ねる。 下手に書き換えられたら別アプリになるから。。。

iOS9のFontFamilyName

iOS8系でフォントの一覧を出したので、iOS9でもやっておく。 なんかfamilyNamesの中身が無いものもいくつかあったぽい(たぶんCJKとか言語に依存するものだと思う)。 取得方法 familyNameからfontNameを取得する。 for (NSString *familyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { NSLog(@"%@", fontName); } } 確認環境 iPhone Simulator (iOS9) 結果抜粋 Copperplate-Light Copperplate Copperplate-Bold IowanOldStyle-Italic IowanOldStyle-Roman IowanOldStyle-BoldItalic IowanOldStyle-Bold KohinoorTelugu-Regular

iOS8のFontFamilyName

iOS9はこちら 取得方法 familyNameからfontNameを取得する。 for (NSString *familyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { NSLog(@"%@", fontName); } } 確認環境 iPhone Simulator (iOS8.2) 結果抜粋 Marion-Italic Marion-Bold Marion-Regular Copperplate-Light Copperplate Copperplate-Bold STHeitiSC-Medium STHeitiSC-Light IowanOldStyle-Italic IowanOldStyle-Roman IowanOldStyle-BoldItalic IowanOldStyle-Bold CourierNewPS-BoldMT CourierNe