Category Archives: Xcode

Xcode 6.1が怖い理由

0
Filed under Xcode
Tagged as ,

先週(10/17)の話ですが、Xcode 6.1でビルドしたアプリを申請しようとしたら、アップロード後、「非公開APIを利用している」との理由で審査待ちにすら入りませんでした。
Xcode 6.1 Non-Public API

iTunes Store operation failed
Your app contains non-public API usage. Please review the errors, correct them, and resubmit your application.
The app references non-public selectors in Payload/APP_NAME.app/APP_NAME allocBatch:withEntity:count, allocWithEntity:, fastIndexForKnownKey:, indexForkey:

もちろん、非公開APIは使っていません。
そもそもそれまでに何度か申請してリジェクトされていたプロジェクトなので、非公開APIが入ることはありません。
そこで調べてみたら、Xcode 6.1を使っていると発生することがあるとわかりました!

しかも、結論が、Xcode 6.0.1でビルドしてアップすると問題無い、という後ろ向きな解決策のみ。
Swiftの構文とかも若干変わっているので迷いましたが背に腹は代えられません。結局、Xcode 6.0.1でビルドできるようにコードを修正し、アップしたら問題なく通りました。。

問題のあるバージョン

ただ、その後、Appleのデベロッパーサイトを見ても、バージョンが上がらないので、特定の環境なのかな?と思っていたのですが、よく見ると、地味に、ビルド番号が上がっています。
Xcode 6. 1 (6A1052c)
私の問題が発生したアプリのバージョンは、Xcode 6.1 (6A1052c)ですが、今は、Xcode 6.1 (6A1052d)が、「Oct 20, 2014」付でアップされています。微妙に違うので、もしかしたらこの辺りの修正がなされたのかもしれませんし、別の修正なのかもしれません。


lldbでiOSの例外を克服

0
Filed under Xcode
Tagged as , , , ,

プログラミングにおいて例外が発生したときの対応はとても重要です。
しかし、iOS開発で例外が発生したとき、なんとなく例外が発生したコードの付近を眺めて原因を予測していたりしませんか?
iOSがOSレベルで発生させる例外はきちんと原因表示ができるので、次の手順を覚えておくと、デバッグが容易に、そして確実になります!

例外を発生させるコード

さて、例外発生時の対応を学ぶためにはまずは例外を発生させるコードが必要になります。
いちいちコードを書くのも面倒、という人のために、プロジェクトをまとめてGitHubにアップしておきました。その名も「GenerateException」というプロジェクトです。

とてもシンプルに、ボタンを押したら例外が発生する仕組みになっています。

例外発生時に止める

Xcodeでは、ブレイクポイントの設定の中にすべての例外発生時に止める事ができるオプションがあります。まずはこれを設定しましょう。
Xcode左側のペインに、ブレイクポイントナビゲーターを表示させます。
そして、左下にある[+]ボタンを押して出てくるメニューから「Add Exception Breakpoint」を選びます。
lldbでiOSの例外を克服 Xcode
これで「All Exceptions」というブレイクポイントが追加され、準備は完了です。
lldbでiOSの例外を克服 Xcode

例外の出す情報を見る

プロジェクトをダウンロードし、ブレイクポイントの設定が完了したらあとはデバッグ実行してください。
起動した画面にあるボタン『Generate Exception』を押すと例外が発生し、下図のような状態で止まると思います。
lldbでiOSの例外を克服 Xcode
ただ、現在は例外が発生し、その元となるコードで止まっている状態ですので原因がわかりません。
ここで例外の原因を調べる方法は次のような手順となります。
1. 例外の発生しているスタックフレームを選択する(左側のスタックの一番上の”0 objc_exception_throw”というところ)
2. デバッグエリアのコンソールを開き、”(lldb)” に続いて “po $eax” とタイプし、Enterを押します。

(lldb) po $eax

3. これで今回発生した例外の原因が表示されます。
lldbでiOSの例外を克服 Xcode
以上!

lldbでスタックフレームを見る

One More Thing,
lldbにはいろいろ便利な機能があり、”po hogehoge”というのが有名かと思いますが、次のコマンドで現在のスタックフレームの変数を一覧することができるのを最近知り便利に使っています!
lldbでiOSの例外を克服 Xcode

(lldb) frame variable

Generic Xcode Archiveとなってしまう場合

0
Filed under Xcode, トラブルシューティング
Tagged as , ,

Xcodeでプロジェクトをアーカイブしたら、Organizerで表示されるアイコンがバインダーみたいなものになり、アーカイブタイプ (Archive Type)が “Generic Xcode Archive” となってしまうことがあります。
GenericXcodeArchive-1

TestFlightなどでの配布は出来るのですが、このままだと App Storeにアップできません
これを解消する手順を調べてみたら、今回の私のケースでの原因は、アプリのプロジェクト内にライブラリのプロジェクト(GPUImage等) を含んだのが原因のようでした。
この場合のいくつかのサイトに情報が載っていたのでまとめておきたいと思います。

設定すべきことは下記の3つ。

1. メインプロジェクトの設定

アプリのメインとなっているプロジェクトを選択し、その”Build Settings”内にある “Skip Install” を “NO” に設定します。

2. サブプロジェクトの設定

同様にサブプロジェクトの”Build Settings”にある“Skip Install” を、こちらは “YES” に設定します。

3. サブプロジェクトのヘッダー設定

サブプロジェクトの”Build Phases”の”Copy headers”セクションを開きます。
その下には”Public”, “Private”, “Project”という3つのセクションがあり、ライブラリで使うヘッダーが指定されていると思いますが、“Public”, “Private”にあるものを全て”Project”以下にドラッグし移動します。
GenericXcodeArchive-2

以上で問題なくビルドできると思われます。

参考サイト


[AD]

↓のだめの作者がのだめの次に描いたのは自作PC!オーバークロックの漫画!Kindle版!

87CLOCKERS 1 (ヤングジャンプコミックスDIGITAL)

87CLOCKERS 1 (ヤングジャンプコミックスDIGITAL)

カテゴリ:Kindle版

発売日:2012-12-28


↓こちらはハッカーとエンジェル投資家の漫画らしい!

王様達のヴァイキング 1 (ビッグコミックス)

著者/訳者:さだやす 深見 真

出版社:小学館( 2013-07-03 )

定価:

Amazon価格:¥ 596

コミック ( 210 ページ )

ISBN-10 : 4091853293

ISBN-13 : 9784091853295


malloc_error_breakにブレークポイントを設定する方法

0
Filed under Xcode
Tagged as ,

XcodeでiOSアプリを開発していると、実行時に下記のようなメッセージが出て落ちることがあります。

APPNAME_XXX(6028,0x3cb6eb78) malloc: *** error for object 0x1e0aa9c0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

要約すると、「”malloc_error_break”にブレークポイントを設定して、問題がある場合の対応を検討してください」ということなのですが、その設定手順をメモしておきます。

シンボリックブレークポイントの設定手順

Xcodeの左側のパネルにある「Breakpoint Navigator」タブを選択します。
左下にある「+」ボタンから「Add Symbolic Breakpoint …」を選びます。
add symbolic breakpoint
下図のように”Symbolic Breakpoint”にチェックを入れ、”Symbol”項目に”malloc_error_break”を入力し、”DONE”ボタンを押します。
Symbolic Breakpoint
これでOKです!


[AD]

↓第2版が出ました!初版を持っているのですが、XcodeのUIが変わったりしていたので、出ないかなー、と思っていたところ!表紙も黒から白へ!

iOSデバッグ&最適化技法for iPad/iPhone第2版

著者/訳者:國居 貴浩

出版社:秀和システム( 2013-01-30 )

定価:

Amazon価格:¥ 1,944

単行本 ( 305 ページ )

ISBN-10 : 4798036773

ISBN-13 : 9784798036779


↓タイトルに共感

新版 結局「仕組み」を作った人が勝っている―驚異の自動収入システムは今も回り続けていた! (知恵の森文庫)

著者/訳者:荒濱 一、高橋 学

出版社:光文社( 2013-01-10 )

定価:

Amazon価格:¥ 782

文庫 ( 325 ページ )

ISBN-10 : 4334786200

ISBN-13 : 9784334786205