2014年12月18日

"Your account already has a valid iOS Distribution certificate"のわたしの環境での解決方法

さて、今年も残り少なくなってまいりました。
わたしにとって今年は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"です。

ArchivesErrDialog.png

「あなたのアカウント(iOSアプリの作成者は全てAppleに開発者として登録を申請し、アカウントを持っています)は既に有効なiOS Distribution証明書を持っている」
というような意味でしょうか。有効じゃないならともかく、有効だからいいじゃん。
といくら一人で何十回か呟いてみても、このエラーのために前へ進めません。

ちなみに、このエラーはXCode5では出ないのです。TestFlight用のファイル出力もできます。
そのプロジェクトをそのままXCode6へ移植するとこのエラーが出て、TestFlight用のファイル出力ができないということなのです。

実はわたしも会社で作っている評価プログラムが同じ目にあっていました。
ネットではいろいろなことを試してうまくいったとか自分はそれでもだめだったとか、色々騒がれています。
そして、会社でiOSプログラムを書いている人はわたしも含めて三人ですが、一人はまったくそんな目にあっていない。もう一人は最初にその問題が出たけど、いろいろ試していたら何故か出なくなった。原因はよくわからないけど、証明書に関する操作だと思う。とのこと。

わたしの作成していたアプリは、ウチの会社で作っているiPhone用の周辺機器をテストするためのものでした。
ハードウェアの作成は台湾の別の会社が行っているため、向こうが所有しているiPadをうちの会社のテスト機として登録し、TestFlight経由でアプリを送っていました。

それがXCode6に移行して依頼、TestFlight用アプリの出力ができなくなっていたのです。
とりあえずはXCode5のままで開発を行うという回避策をとっていましたが、今回別のプロジェクトでアプリをXCode6で作り、いよいよ完成に近づいてきたところで、この問題を無視できなくなってきたのです。

色々と試行錯誤をして、十時間以上これに費やしました。(無能っぷりが容赦なく現れるこの時間の浪費)
そして、ついに昨日「わたしのケース」における原因がわかりました!
「アプリ配布用の証明書」が登録されていなかったのです!

……まあ、この証明書に関しては話が複雑なので詳細は省きますが、ようするに開発マシンに証明書を組み込んでおく必要があります。
で、証明書には種類が二つありまして「テストするときに必要」なものと「いよいよ製品として配布するときに必要」な証明書は別なのです。
で、わたしは「製品配布用の証明書」を入れないままに開発をしていました。だって必要ないんだもーん。

TestFlightによるテストというのは、製品配布とは異なるので、おそらくXCode5では不要だったのです。
それがXCode6になり、TestFlightの仕組みが(買収によって)大きく変更があって「TestFlight用のファイルを出力する際にも配布用の証明書が必要」という仕様になったのではないかと。

はい、というわけで、ようやくそれに気がついてDistributionの証明書を入れたら、あっさりできましたとさ!
エラー表示がわかりにくすぎる……
Distribution.png


……この問題で悩んでいる人がすべて同じケースかどうかわかりませんが、XCode6で同じ目にあっている人は、この項目をご確認下さい。

もしもこの情報が役に立って、どうしても感謝の気持ちを表したいという人が出てくるかもしれませんが、まあ、それはわたしもいろんな情報に助けられていますので、気にしないで下さい。











本当に気にしないで下さい。
posted by Red56 at 22:05| Comment(0) | XCode

2014年12月13日

Swiftでのオススメ電子書籍をいくつか

さて、先ほど無事に有料版アプリ(アリスのコインマジック!)が承認されたとのメールが。
これでわたしの方で準備をしてリリースするだけです。

このAppleの審査というのは、申請したアプリが規約に違反していないか、必要のない設定(例えば必要のないBluetoothを[使う]設定にしている)になっていないかということなどをチェックします。詳細は公開されていませんが、こういう風に作りなさいという情報は公開されています。
https://developer.apple.com/jp/support/appstore/app-review/

さて、数日前に「Swift」でやるぞ! と意気込んで、まあ、ぼちぼちやっているわけですが、やはりあちこちでまだ引っかかります。
背景のUIImageViewにbackgroundでUIImageを指定して画像を表示させているのですが、これだとiPhoneの縦横が変わったときに縦用の画像が並んでる状態になるのですが、この画像を回転させるという処理が……絵を二枚用意するしかないの? 全部?
そんなマヌケなやり方はガマンできない! と思って無駄に時間を浪費するのが真のマヌケである証拠……そして未だに解決できないので、もう少し理解が深まったら再度挑戦だ!

「愚か者は自分の行動が愚かであることになかなか気がつかないから愚かなのだ」
絶対誰かがこんなこと言ってますよね。

というわけで、本日はいまのところお世話になっている資料を……

いまからiOSでプログラムを始めるなら「Swift」を知っておくに限るでしょう。
さらにGUI部分を構築するためのStoryboardの仕組みを理解する必要があります。
これはSwiftという言語とはあまり関係なく存在しているものです。
でも、これらを制御するためにはSwiftやObjective-Cが必要ということです。

SwiftでiOSのアプリを始めようという人が参考のためにこのブログを見ているという状況はちょっと考えにくい(いや、そういった意味ではいったいどうして他人様にこのブログを読んでいただけているのかというその理由すら自分にはよくわからないので、そういった人達の期待に応えるために自作のKindle本の宣伝をしたり、オススメ本のことなどを書いたりしているだけでいいのか、あるいは途中で日記なども交えつつ、時には元気な挨拶などを交えて気さくな感じも出した方がいいのか迷っている)のですが、ちょっといくつか資料をご紹介したいと思います。

そういえば、最近、ようやくSwiftが正式リリースになり、初心者向けの本もいくつか出てきました。
書いてある通りにすれば何かアプリができるというやつです。
もちろん、最初は「習うより慣れろ」でとにかく実際に動かすという方法が効果的だと思います。
が、例によってこれらは「画像」本なので「目次」「検索」が一切できないという電子書籍にあるまじき仕様になっているものが多いので、今回はこれらを外します。
……また、サンプルを試してみて、よさそうなものがあれば後日ご紹介します。

こんにちは! さいきんすっかり寒くなりましたね!(迷っている)

えー、いくつかの資料でしたね……
あれこれ見ておりますが、いまのところよさそうなものを……あ、でもいずれも完全に読んでいるわけではありません。「買っても損はないのでは」臭のするものをオススメしております。

なんか妙な本を見つけました! 『Storyboardのツボ』という、いまのところiBooksでしか購入できない本です。ちょっとサンプルを読んでみたら「これは買わなければ!」と思ったので……
作者は著名な方のようですが、スミマセン存じ上げませんでした。わたくし、いつまでたってもモグリのプログラマなもので……


昨日紹介した本ですが、結局買いました。これでもう安心して積ん読できる!


そしてこれ。『Swift離陸ガイド』Swiftがベータ版の頃からアップデートし続けて現在第10版です。
電子書籍ならではの試みですが、ここまでやってくれる本はなかなかないのでは?

posted by Red56 at 09:25| Comment(0) | XCode

2014年08月09日

iPhone4とiPhone5に対応した背景画像の設定

*20140810修正 XCodeの説明画像が間違っていたのを差し替えました。Top Leftにする前の画像を貼ってました……

作ろうとしているiPhoneアプリですが、まあ、最近のiPhone5以降のみ対応させるということで、4インチの解像度(640x1136)だけサポートすればいいか。
と思っていたのです。

が、自分の持っているiPhone4が非対応になるというのは悲しいよなあ……

だったら古い640x960の解像度にも対応させておくか。それならそのままiPad miniでも使える比率だし。
実のところ、高解像度(640x1136)の最近の機種は持っておりません! 表示はシミュレータでテストして、実機動作はiPhone4でやるか。

ということで二つの解像度の絵を用意したのです。

さて、画面に用意した絵をきっちりはめ込むにはどうしたらいいのでしょうか。
なるほど、XCode5のimages.xcassetsに異なる解像度の絵を入れておけば自動的に正しい解像度のものが選ばれて表示されると。
なんて便利なんでしょうか!

さっそく試してみると……
あれ?
解像度を変えると確かに絵も変わっているようですが、解像度が変わらないためにおかしなことに……
つまり、iPhone4だと640x960の絵が表示され、iPhone5のシミュレータでは640x960のエリアに640x1136の絵が縦に圧縮されて表示。下の部分が空白になるというわかりやすいお間抜けな状態に。

AutoLayoutなのか? システムの解像度を取得してUIImageViewに画像のファイル名を直接渡すのか?

さんざん試しましたが、うまくいきません。

なぜこんな簡単なことができないんだ?

もう完全に行き詰まった。

娘が水風船に中途半端に水を入れて膨らませたものをくれました。
行き詰まったので、それに顔を描いてみました。
おお、かわいくなった!
mini.jpg

さて、その後もいろいろとやっていましたが、ついに解決しました!
下記の手順で自動に切り替えてくれるようです!

・640x960と640x1136の画像を用意する。
・images.xcassetsのiPhoneの2xに640x960の画像をドラッグ
・その隣のimages.xcassetsのiPhoneのR4に640x1136の画像をドラッグ
(必要であればUniversalに640x960の画像をセット。iPadに適用されます)
スクリーンショット 2014-08-09 10.21.44.png

・Storyboardで該当するimage viewのattributes inspectorの[View][Mode]を[Top Left]にする。
スクリーンショット 2014-08-10 3.55.21.png


はい、以上です!
間違っていたらスミマセン!
また、これはXCode5 (5.1.1)の情報です。
posted by Red56 at 10:36| Comment(0) | XCode