わたしにとって今年は20年間勤めていた会社を辞めた(まだ嘱託で週三日通ってますが)記念すべき年でした!
今後のことは……まあ、なんとかなるんじゃないでしょうか。
このブログのアフィリエイトで月に数十円稼げているし、Kindleの本も月に数冊売れて数百円になっているし、iOSアプリも先日ついに有料版をリリースして、現在一本も売れていないし。
……あれ? なんかおかしいぞ。iOSアプリはともかく、あの傑作小説は10万部ぐらい売れると思ったのになあ。
というわけで業績予想を1/10000に下方修正しました。
まあ、いろんな人がいるというのが世の常。
金持ちの金持ちによる金持ちのための世の中があってもいいんじゃないでしょうか。
寒風に吹かれ、摩天楼の上の方でぼんやりと輝く光を見上げている雪の夜。
そんな場面が松本零士先生のマンガでありましたね。たぶん。
というわけで、本日はもう一つお得な情報をお届けします。
iOSアプリを作るには、Macでプログラムを書いて、アプリケーションファイルを作成するしかないわけですが、このファイルをiPhoneやiPadに持っていけば動くというものではありません。この辺りの自由度の低さは「セキュリティ」を高めるための仕組みです。
iPhoneやiPadにはユーザーにとって重要な情報(住所録やクレジットカードの情報)が入っているので、関係ないアプリがそういった情報にアクセスできないように作られています。
なので、勝手に中身を覗くようなアプリを入れられないようになっていると。
まあ、たぶんそんなことなのだと思います。
通常はiOSにアプリを入れる唯一の方法が「App Storeで購入する」という行為です。
しかし、アプリの供給側がApp Storeへアプリを並べるためには、Appleへ申請して、アプリに致命的なバグや公序良俗に反する内容がないというチェックを受ける必要があります。
そもそもプログラマがアプリを作成している段階ではその手順が踏めないわけです。
でも、作っている側としては一つ画面を作っては「このボタンを押したとき、キチンとこの画面が呼び出され、前の画面で入れた数値が表示されるか」ということをテストしたいわけです。
それを可能にする「開発&テスト」の環境がXCodeです。
プログラムを書き、その動作をMacにつないだiPhoneで確認できる。
なんと便利な環境でしょう。
さらに、XCodeで作ったファイルを遠く離れたiPhoneやiPadに組み込むための「TestFlight」というWebサービスの仕組みもあります。
これは予めiPhone/iPadの個体識別番号を登録しておくことによって、その後はネットを通じてそのiPhone/iPadに開発途中のアプリをインストールできるという仕組みです。
もともとAppleとは別の会社が立ち上げていたサービスですが、最近になって、Appleによって買収されました。今後、ますます便利になっていくことでしょう。
さて、iOS用アプリの開発環境がXCode5からXCode6(最新のiOS8に対応)になってから謎のエラーが発生するようになり、いろんな開発者が「これどうなってるの?」と悩んでいる問題があります。
Macに接続したiPhone/iPadのテスト用にアプリを作っているときには問題がないのですが、TestFlight用にアプリを出力しようとすると出てくる謎のエラー"Your account already has a valid iOS Distribution certificate"です。

「あなたのアカウント(iOSアプリの作成者は全てAppleに開発者として登録を申請し、アカウントを持っています)は既に有効なiOS Distribution証明書を持っている」
というような意味でしょうか。有効じゃないならともかく、有効だからいいじゃん。
といくら一人で何十回か呟いてみても、このエラーのために前へ進めません。
ちなみに、このエラーはXCode5では出ないのです。TestFlight用のファイル出力もできます。
そのプロジェクトをそのままXCode6へ移植するとこのエラーが出て、TestFlight用のファイル出力ができないということなのです。
実はわたしも会社で作っている評価プログラムが同じ目にあっていました。
ネットではいろいろなことを試してうまくいったとか自分はそれでもだめだったとか、色々騒がれています。
そして、会社でiOSプログラムを書いている人はわたしも含めて三人ですが、一人はまったくそんな目にあっていない。もう一人は最初にその問題が出たけど、いろいろ試していたら何故か出なくなった。原因はよくわからないけど、証明書に関する操作だと思う。とのこと。
わたしの作成していたアプリは、ウチの会社で作っているiPhone用の周辺機器をテストするためのものでした。
ハードウェアの作成は台湾の別の会社が行っているため、向こうが所有しているiPadをうちの会社のテスト機として登録し、TestFlight経由でアプリを送っていました。
それがXCode6に移行して依頼、TestFlight用アプリの出力ができなくなっていたのです。
とりあえずはXCode5のままで開発を行うという回避策をとっていましたが、今回別のプロジェクトでアプリをXCode6で作り、いよいよ完成に近づいてきたところで、この問題を無視できなくなってきたのです。
色々と試行錯誤をして、十時間以上これに費やしました。(無能っぷりが容赦なく現れるこの時間の浪費)
そして、ついに昨日「わたしのケース」における原因がわかりました!
「アプリ配布用の証明書」が登録されていなかったのです!
……まあ、この証明書に関しては話が複雑なので詳細は省きますが、ようするに開発マシンに証明書を組み込んでおく必要があります。
で、証明書には種類が二つありまして「テストするときに必要」なものと「いよいよ製品として配布するときに必要」な証明書は別なのです。
で、わたしは「製品配布用の証明書」を入れないままに開発をしていました。だって必要ないんだもーん。
TestFlightによるテストというのは、製品配布とは異なるので、おそらくXCode5では不要だったのです。
それがXCode6になり、TestFlightの仕組みが(買収によって)大きく変更があって「TestFlight用のファイルを出力する際にも配布用の証明書が必要」という仕様になったのではないかと。
はい、というわけで、ようやくそれに気がついてDistributionの証明書を入れたら、あっさりできましたとさ!
エラー表示がわかりにくすぎる……

……この問題で悩んでいる人がすべて同じケースかどうかわかりませんが、XCode6で同じ目にあっている人は、この項目をご確認下さい。
もしもこの情報が役に立って、どうしても感謝の気持ちを表したいという人が出てくるかもしれませんが、まあ、それはわたしもいろんな情報に助けられていますので、気にしないで下さい。
本当に気にしないで下さい。