2024.10.01
【勉強】ミドルウェア・アプリケーションのEOL・EOSLについて学んでみた
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版時に確認されていたバグらしく、正式リリースでも直っていなかったみたい。
詳しい発生条件は定かではないです。
以下のツイートにも似たようなデータ書き込み時のエラーあり。
ios8でDocumentsにNSFileManagerの createFileAtPathでファイル作成しようとするとfileSystemRepresentationWithPathの引数がnilで死ぬんだけどios8のバグ?ios7までは動くんだけど。誰か教えて!
— なおsoft (@naonao_info) September 19, 2014
NSData writeToFileを使う事で回避出来たけど、ios8のバグだよね?今までのアプリほぼ特急審査ださなあかんなー。
— なおsoft (@naonao_info) September 19, 2014
・解決方法
ひとまず、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つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索