カテゴリ: General
投稿者: mio
XCodeで、デバッグ中のアプリを、ホームボタン2回押しで、アプリの左上にある「-」ボタンを押して終了した後、もう一度起動しようとすると、

mainの関数の
int retVal = UIApplicationMain(argc, argv, nil, nil);
という行に
Thread 1: program received signal "SIGKILL"
と出ます。

sc1


すると、ホームボタンを押しても、画面が真っ暗なままになってしまい、操作がほとんど効かない状態になってしまいます。シミュレーターでも実機でも、同じ症状になり、復帰するには、実機の場合は電源ボタンを一度押してロック解除して元の画面に戻るか、シミュレーターの場合は、シミュレーターを終了して立ち上げ直したりする必要があります。

いろいろ試して分かったのですが、この症状は、XCodeでRunして、デバッグ中のときだけ発生するようでした。そのため、XCodeで、Stopさえしてあれば、このようなことは起こらないと分かりました。


最初、アプリを終了するときに必要な処理が十分に行われていないことが原因で、この問題が発生しているのかと思って、かなり悩んでいたのですが、簡単なことでホッとしました。
カテゴリ: General
投稿者: yoshigiwa
制作したアプリをApp StoreでリリースするにはiTunes Connectでアプリの審査を通過する必要があります。
この手続きも一筋縄ではいかないものだったりします。
今回は無料アプリの申請をしてみたのでメモしておきます。
有料の場合は登録の際に税金の手続きやいろいろとまた更に時間がかかりそうです。

制作したアプリをiTunes Connectで申請する手順は
? : iTunes ConnectでLoginし、Manage Your Appをクリック
null
 ここでアプリの情報やスクリーンショットなどを登録します。
 (ここはさほど難しくないので割愛します。)
 各項目の記入を終えて、アプリがupload待ちの状態になった事を確認したら、Xcodeでアプリをビルドするための準備をします。

? : iOS Provisioning Portalにいきます。
 前回ここで実機テストをする際に、実機テスト用の認証キーを作成してキーチェインに登録する必要がありました。
 今度は、配布用の認証キーを新たに作る必要があります。

? : Certificates > Distribution で前回と同じように認証キーを作成 > ダウンロード > キーチェイン登録

? : Provisioning > Distribution で同じように認証キーを作成 > ダウンロード > プロビジョニングを~/Library/MobileDevice/Provisioning Profilesにコピー

? : Xcodeを起動し、左側の"グループとファイル"のプロジェクトファイルを右クリック >"情報を見る">"構成"タブへいきます。
 ここで、"Release"を選択し下の"複製"ボタンをクリックして複製されたものの名称を変更します。(任意な名前)
 名前を変えたら下の"ビルドが使用するコマンドライン"をいま作成したリストに切り替えます。

? : "ビルド"タブを選択し、"構成"を上で作ったものを選択
 すぐ下の設定の"コード署名"の"コード署名ID"内の"Any iOS Device"の右側を上の?で作った"Distribution"を選択

? : 同じようにターゲットファイルも"情報を見る"から"ビルド"タブで"構成"を変更
 下の"設定">"コード署名">"コード署名ID">"Any iOS Device"の右側の"Distribution"を変更

? : Xcodeの上のツールバーから"プロジェクト">"アクティブターゲット""を編集"を開き、上記二つと同じように"ビルド"の"構成"を変更し、同じように下の"Distribution"も変更

? : "グループとファイル"の"info.plist"を選択し各種項目を入力
 ここはXcodeのプロパティリストエディタが参考になります。
 Iconの設定はCFBundleIconFilesでiPhone3G(57*57)/iPhone4(114*114)/iPad(72*72)のアイコンをまとめて記入しないとエラーが出るので注意。

? : Xcodeの左上の概要で"Device"を選択し、"構成"を?で作ったものを選択

? : 上のツールバーから"ビルド">"Build and Archive"
 ビルドに成功したらオーガナイザが開きます。

? : 開いたオーガナイザで左側の"IOS DEVELOPMENT"内の"Archived Applications"を選択すると、右側に先ほどビルドしたアプリが出てきます。その下にビルドした時間が表示されるのでそれを選択

? : 下の"Submit Application to iTunes Connect..."をクリックしてビルドしたアプリをiTunes Connectにuploadします。

? : これで成功したらUpload完了、iTunes Connectのサイトで申請したアプリがWaiting for Reviewになる筈です。


?の部分で何度も同じ"Application failed codesign verification."というエラーが出て2〜3時間戦いました。。
結構誰もが通る関門のようで、やり方を解説してるサイトが沢山ありました。
その中で今回、特に参考になったサイトは下のサイトです。

iPhone/申請方法 - MinacoWiki
Application Loaderでファイルをアップロードするところで詰まってます。助けてください。 « 寺子屋サルでき
アプリ申請エラーの解決法「Application failed codesign verification. 」

その他にも解説しているサイトは沢山ありますので、調べると結構出てきます。

2010/11/08: iPhone実機テスト

カテゴリ: General
投稿者: yoshigiwa
この回からMobile Devを引き続き更新していこうと思います。

iPhoneアプリ開発で実機テストをするためにはiPhoneDeveloperProgramで認証登録する必要があります。

登録情報記入 > FAX確認 > iOS Developer Program購入 > アクティベートという長い道のりを経ての実機テストを登録する作業に入ります。
一つだけ特につまづいてしまった点は、Current Development Certificatesの登録の際に必要になる.cer拡張子の証明書アップロードの.cer拡張子の作成でした。

アプリケーション > ユーティリティ > キーチェーンアクセス のツールバーから
キーチェーンアクセス > 証明書アシスタント > 認証局に証明書を要求... で作成できてるの筈なのにアップロードがうまくいきませんでした。

エラー内容

ファイル拡張子が違うみたいな事が書かれてます。
どの参考サイトにも載っておらず少し混乱しましたが、ここは作成した証明書CertificateSigningRequest.certSigningRequestをCertificateSigningRequest.cer
に拡張子を短くするだけで無事アップロードできました。

ここからはサクサクとDevices登録、AppIDs登録、Provisioningを完了させて念願のiPhone実機テストに辿り着く事ができました。
既に多くのページで細かい手順を説明されているのですが、今回はumelog.comさんのページを特に参考にさせて頂きました。
カテゴリ: General
投稿者: mio
C言語の子孫みたいなのはたくさんあるようですが、違いというか誕生した順番や、おおよその違いを知りたかったのでエントリーを作りました。

C : 1971年誕生。前身はB。
C++ : 1983年誕生。オブジェクト指向になった
C# : 2001年誕生。マイクロソフトが作った。ECMA準拠。
Objectvie C : 1983年誕生。NextSTEPなどを経て、Appleが開発した。最新はver. 2.0

C# は、windowsでしか動かない
Objective C は、MacやiPhoneでしか動かない

C, C++ は割とニュートラルな存在っぽいです。
カテゴリ: General
投稿者: mio
iPhone開発本を読み始めて、最初になんだコリャ?と思った、クラス名にやたらとついてる「NS」という表記が何なのかやっと分かりました。

MacOSの前身であるNEXTSTEPというOSが1987年〜1996年ぐらいまであったらしいのですが、それがObjective-Cで書かれていたらしく、NEXTSTEPを略して、NSとし、それを、クラスライブラリのトップにあるObjectクラスの頭に付けちゃったということらしい。

最初NSという表記を見たとき名前が特殊な感じがして、iPhoneに特有のクラスかと思いましたが、どうやらObjective-C全体がそうなってるようですね。

ちなみに、クラス名の接頭辞で、NS以外にも、UIやCAなど、いちいち接頭辞が付いているようですが、それは、Objectctive-Cが言語使用として、クラススコープを備えていないからで、間違って最初からあるクラスと同じ名前をつけてしまわないように、という理由があるとかないとか、そんな感じみたいです。