メニューを閉じる

テクノデジタルグループ

メニューを開く

2014.09.30

プログラミング

iOS8およびXcode6での問題点メモ

こんにちは、ZYです。

今回は、iOS8やXcode6で新たに問題になった点などを、いくつかメモ。

原因や対処法がわかっていない奴もあるので、またわかったら加筆します。

 

1.データ書き込みの際にパス関連でエラーが出てクラッシュする。

私のやっていた案件で出たiOS8のバグ。

アイテム課金後、返ってきたレシートを保存しようとした際に、

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];

NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];

BOOL write = [receiptData writeToFile:@"receipt" atomically:YES]; //ここでクラッシュ

データを端末内のストレージに書き込む[NSData writeToFile:]でエラー。(ちなみに、receiptDataはちゃんと中身ありました)

そして、以下のようなエラーメッセージ。

[NSFileManager fileSystemRepresentationWithPath:]

have nil or empty path.

下記のフォーラムを見るとiOS8Beta版時に確認されていたバグらしく、正式リリースでも直っていなかったみたい。

http://stackoverflow.com/questions/25359092/different-behaviour-of-nsmutablestring-writetofile-in-ios7-and-ios8

詳しい発生条件は定かではないです。

以下のツイートにも似たようなデータ書き込み時のエラーあり。

 

・解決方法

ひとまず、NSUserDefaultを使用してレシートを保存しておくように避難。

あとはバグの修正待ち。

 

2.アニメーションしない

[UIView animateWithDuration:0.3f animations:^{
        _rootViewController.view.frame = frame;
    } completion:^(BOOL finished) {
        //...

ごく普通のアニメーションですが、時折動かない奴が出てきます。

これも原因を詳しく調べられていないので、不明。

同じ書き方で動いてるところも多く、まだわかんないです。

 

・解決方法

以下のブログから。

http://ka-zoo.net/2014/09/ios8-issues-and-more/

[UIView animateWithDuration:0.3f animations:^{
        _rootViewController.view.bounds = bounds;
        _rootViewController.view.center = center;
    } completion:^(BOOL finished) {
        //...

こうすれば大丈夫らしい。

 

3.Xcode6でArchiveをエクスポートする(ipaファイル化)際に、AppleIDの登録が求められるようになった

Xcode5までは、プロビジョニングプロファイルさえインストールされていればipaファイルにできたんですが、Xcode6からはエクスポート時にAppleIDがXcodeに登録することが必要になりました。困ります。困りました。

現在、私は社内共通のAppleIDを使って開発している訳ですが、管理面の問題(Xcodeに登録しておくと、Xcode側からプロビジョニングプロファイルを作れたり、アカウントを消したりできるので、管理がややこしくなる)から、AppleIDをXcodeには登録せずに開発しております。

 

出来ればAppleIDは登録したくない、でもXcode6で新機能も試したい・・・と、いうことで、登録せずにipaを作る方法が以下のサイト。

http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/

要するに、ターミナルからコマンドでエクスポートしてしまおうという方法。

xcodebuild archive -project $projectname.xcodeproj -scheme $schemename -archivePath $projectname.xcarchive

このコマンドで、プロジェクトファイルを指定してアーカイブ化。

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile “Provisioning Profile Name”

次に、作ったアーカイブを指定して、ipa化。

こんな感じ。

 

で、上記サイトにも書かれているんですが、インストールされたプロビジョニングプロファイルは、そのままの名前ではなく、UUIDで名前を変更されてインストールされます。

これが問題で、フォルダ内を見ると、以下のようなファイルがずらーっと並んでるわけです。

**********-A61D-42B1-**********-788D3435B1F7.mobileprovision

**********-a8ed-463d-**********-561005886d58.mobileprovision

**********-4865-4EE4-**********-7C6BA9335D7E.mobileprovision

 

 20個ぐらい。

 この中から、アプリに適合するプロビジョニングプロファイルを探さないといけないわけですねぇ・・・。

 一応、ファイルの中身を覗ければ、UTF-8でplist(xml)らしきものが書かれているのが見えるので、それを頼りに試してみましたが、無情にも下記のエラーが。

error: no provisioning profile matches b3xxxxx-xxxx-xxxx-xxxxxxxxxxxx.mobileprovision’

** EXPORT FAILED **

 と、いうわけで、まだこの方法でipa化出来ていません。(10/1現在)

 ・・・もっといい方法が無いか、調べておきます。

・追記 10/3

 はい。そうです。私が間違ってました。

 http://qiita.com/naotokui/items/9cd44475c37d0c3e722f

-exportProvisioningProfileに渡す、プロビジョニングの名前はファイル名ではなく、Developerポータルで登録されている名前、言い換えれば、Build SettingのProvisioing Profileの欄に表示される名前なので注意が必要です. (下記の場合だと “Generic Development”)

 とあります。

 いやぁ、これまでUUIDで付けられたファイル名(********-A61D-42B1-9964-**********とか)で指定していたんですが、それが間違いだった訳ですね。

 ”Wildcard App”など、プロヴィジョニングプロファイルの登録に使用された名前を指定してやるのが正解でした。

 無事ipa化でき、動作も確認しました。

 これでAppleIDをXcodeに登録しなくても、ipa化できます。


【記事への感想募集中!】

記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!
  • こんな記事が読んでみたい、こんなことが知りたい、調べてほしい!という意見も募集中!
  • いただいた感想は今後の記事に活かしたいと思います!

感想フォームはこちら


【テクノデジタルではエンジニア/デザイナーを積極採用中です!】

下記項目に1つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事