Monthly Archives: 9月 2014

iOS8にてLaunchScreen.xibを使用せずに従来通りの起動画面(スプラッシュ)画像を使いたい場合の対処

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

Xcode6からはLaunch Screen File項目にてLaunchScreen.xibを選択しxibにてベクター画像を設定することで、スプラッシュ画像が各画面サイズに自動的に対応するようになりました。

とても便利なのですが、すぐにベクター画像が用意できない状況や画面サイズによって画像を使い分けたい場合など、なにか特別な事情がある場合はLaunchScreen.xibを使用せず従来通りに各画面サイズの画像を適用したいこともあるかと思います。

iOS7が載った端末で動かす場合Launch Images Sourceに各画像が設定されていればそちらが優先されますので特に何も考えなくても良いのですが、iOS8が載った端末だとデフォルトでLaunchScreen.xib(Main.storyboardが選択されていればそちら)を参照するようになっていますので、各画面サイズの画像が適用されません。

 

期待した動きにさせたい場合は、Launch Screen File欄を空にしましょう。これでiOS8でも従来通りの方法で起動画面を表示することができます。

※他の(正式な?)方法があるかもしれません、ご存知の方がいらっしゃったらご教示いただけると幸いです


UIAlertControllerでdeclares the selector ‘presentViewController:animated:completion:’

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

iOS7まで使用可能だったUIAlertViewはdeprecatedになり、iOS8ではUIAlertControllerを使うことが推奨されました。

そのUIAlertControllerをpresentViewControllerで表示しようとした際、以下のようなエラーになることがあります。

No visible @interface for ‘AppDelegate’ declares the selector ‘presentViewController:animated:completion:’

UIAlertControllerをビューコントローラー以外から表示しようしたのが原因です。UIAlertViewはビューコントローラー以外でも表示可能でしたが、UIAlertControllerはUIViewControllerの派生クラスですので表示元としてビューコントローラーが必要です。

 


pod installで”[!] Could not automatically select an Xcode project. Specify one in your Podfile like so:”

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

$ pod install
Analyzing dependencies
[!] Could not automatically select an Xcode project. Specify one in your Podfile like so:

    xcodeproj 'path/to/Project.xcodeproj'

メッセージ通りの、簡単に解決できるエラーです。

pod installの実行で上記のエラーになる場合、当該プロジェクトのディレクトリ以外にPodfileを置いてインストールを実行していることが原因です。Podfileを正しい場所(=ターゲットにしたいプロジェクトのディレクトリ)に移し、その場所でpod installを実行すれば解決します。

 


Xcode6で実機が認識されずにIneligible Devices (deployment target)になる場合の対処

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

上記のようにIneligible Devicesとなり実機が選択できなくなる現象ですが、カッコ内にdeployment targetとある場合は、実機のOSバージョンとTARGETSのターゲットOSバージョンが不適切なことが原因です。

 

[TARGETS]->[Build Settings]->[Deployment]->[iOS Deployment Targert]項目を実機のOSバージョンに対応したTARGETSのOSバージョンに設定すれば解決できます。

ちなみに、上記画像の例は、iOS Deployment TargertがiOS8のTARGETS(スキーム)で、iOS7.xを載せたiPhone5を選択しようとした場合です。

<補足>
Ineligible Devices (OS version)の場合は、以下を参照してください。
Xcode6で実機が認識されずにIneligible Devices (OS version)になる場合の対処


iOS8でUITableViewのヘッダーセクションが表示されなくなった場合の対処

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

UITableViewのヘッダーをviewForHeaderInSectionでカスタマイズしている場合、iOS7(まで)はheightForHeaderInSectionにて高さを指定しなくても表示されていましたが、iOS8では明示的に高さを指定しないと表示されなくなりました。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return ***;	// 任意の値
}

これでOKです。


iOSにCrashlytics SDKを導入する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

■前提条件

・Crashlyticsアカウントは取得済み
・当該プロジェクトにCrashlytics SDKを新規導入する
・iOS 7.1.2
・Xcode 5.1.1
・MacOS X 10.9.4

 

■手順

(1) Crashlyticsアプリをインストールする

https://www.crashlytics.com/

Crashlyticsサイトにログインし、

 

Dashboard Pluginsを選択します。

 

XCODEを選択し、

 

I agree to the Terms of Serviceにチェックを入れ、Downloadボタンを押下します。その後、Crashlytics-latest.zipがダウンロードされるので解凍し、Crashlytics.appをApplicationディレクトリに追加します。

 

(2) Run Scriptを設定する

Crashlytics.appを起動し、+New Appをクリックします。

 

組み込み先のXcodeプロジェクトを選択し、Nextボタンを押下します。

 

Workspace内にサブプロジェクトがある場合は、サブプロジェクトを選択し、Nextボタンを押下します。サブプロジェクトが存在しない場合はこの画面は出ません。

 

当該プロジェクトにRun Scriptを記述するよう促されますので、コマンドをコピーし、

 

 

Xcodeの[Editor]->[Add Build Phase]->[Add Run Script Build Phase]でRun Script入力欄を表示してペースト(すでに他のRun Scriptを入力済なら既存スクリプトに影響が出ないように追加してください)、ビルドを実行します。

 

(3) Crashlytics SDKを追加する

Run Script入力後のビルドが通ると上記の画面に遷移するので、表示されている「赤い箱」を当該プロジェクトへドラッグしてからNextボタンを押下します。

 

(3) 初期設定を行う

上記の画面に遷移したら、AppDelegate.hに下記を追記します。

#import <Crashlytics/Crashlytics.h>
・・・
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [Crashlytics startWithAPIKey:@"*********************"];
    ・・・
}

追記したら実行させます。

 

すべてがうまくいくと、上記の画面に遷移します。Initialize the SDK画面ののまま切り替わらない場合もあり不安になりますが、問題なく済んでいる場合がほとんどです。気になる場合は、一度デバッグを停止させ、再度実行してください。

 

■補足

[Crashlytics] Unable to locate application icon

デバッグモードでの起動直後に上記のようなメッセージが吐き出されることがありますが、これはXcodeプロジェクトにアプリのアイコンが設定されていないためCrashlyticsにアイコンが引き継げず、CrashlyticsサイトのDashboardやCrashlyticsアプリに当該アプリのアイコンが表示されないことを意味しています。

 


CodeSign error: code signing is required for product type ‘Application’ in SDK ‘iOS *.*’

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

OSSや自分以外の誰かが開発していたプロジェクトファイルを引き継いだ際に多いのですが、実機デバッグでビルドor実行の際、上記のエラーに遭遇することがあります。

 

多くは Code Sigining Identifer が Don’t Code Sign になっているのが原因で、適切なプロビジョニングプロファイルを選択すれば正常にビルドされます。

 

注意点としては TARGET側の Code Sigining Identifer にプロビジョニングプロファイルを設定することであり、PROJECT側のCode Sigining Identifer に設定しても解決されません。

 


iOSベータ版の使用期限が切れてしまった場合のiOSデバイス復旧方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

iOSベータ版には約2-4週間の使用期限があります。使用期限前までに次のベータ版もしくは正式版をインストールすればそのまま継続利用できますが、その使用期限を過ぎてしまうとアクティベートを求める画面が表示され、アクティベートを何度実行してもアクティベートできない状態に陥るなど、iOSデバイスが事実上使用不可になってしまいます。不幸にもそうなってしまった場合はリカバリモードで復旧させます。

この例ではiOSデバイスとしてiPhoneを例に挙げますが、もちろんiPadも同様の方法で復旧できます。

(1) iPhoneの電源をオフにする

(2) iPhoneを管理しているPC/MacでiTunesを起動させておく

(3) iPhoneのケーブルをPC/Macに接続する
(注意)この時、iPhoneにはケーブルは繋がないでください

(4) iPhoneのホームボタンを押下した状態でケーブルを接続する

(5) その状態を保持しながら「iTunes に接続」画面が表示されるまで待機

(6) 「iTunes に接続」画面が表示されたらホームボタンを離す

(7) 「iTunesはリカバリモードのiPhoneを見つけました。iTunesでご利用になる前に、このiPhoneを復元する必要があります。」ダイアログが表示されたら[OK]ボタンを押下する

(8) iTunesがリカバリモード画面に切り替わっていたら[iPhoneを復元…]ボタンを押下する

(9) 確認ダイアログが表示されたら[復元とアップデート]ボタンを押下する

(10) ソフトウェアアップデートの説明ダイアログが表示されたら[次へ]ボタンを押下する

(11) 使用許諾ダイアログが表示されたら[同意します]ボタンを押下する

以降、ソフトウェアアップデートがはじまり、インストール後に再起動がかかります。

その後、アクティベートを行えば、当該デバイスに対応する最新版のOSがインストールされた状態に復旧させることができます。