ダーヤス.com プレミアム

ダーヤス.comにようこそ。プレミアムな情報で、ワークライフバランスの充実を図りませんか。

【SWIFT】【iOS】【Xcode】linker command failed with exit code 1 (use -v to see invocation) とかSKLabelNodeの背景色とか解決できない

   

linker command failed with exit code 1 (use -v to see invocation)

iOSデベロッパプログラム(iOS Developer Program)の更新期限が迫って来たけど更新しない予定とかいうことを書いておきながら、年会費11800円払って更新して平然とiphoneアプリの開発を続けている昨今です。
電車でMacBook Airを開いてxcodeにコードを書いている人間がいたらもしかしたらそれ私かもしれない。
今まで23個だかそれくらいアプリをapp storeに並べたので、もうこうなったら1個人で100個のアプリをストアに並べるのを目標にしようか。


SWIFTはobjective-cより楽

さて、久しぶりにxcodeでプロジェクト作成とかやったので細かいことを覚えてなかったりするのですが、なんとなく手探りでググりながらやっているうちに、一週間くらいで以下のような画面のアプリが完成しました。

SKLabelNodeの背景色

あとはアイコンを設定してApp Storeで配信するために審査請求すればいいだけです。
というかここがいつもめんどくさいから、やろうと思うときな粉ヨーグルトを作って食べたり部屋の掃除をしたりネットサーフィンをしたり漫画を読んだりして一向に進まなかったりします。
アイコンとかローンチ画面とかを所定のサイズ分だけ作ったり、アプリの説明を英語で書いたりする作業って地味に1時間以上かかったりするので、割とまとまった時間が取れないとなかなか手につかなかったりするのですがこれってダメ人間ですかね。

しかも、いつのまにかiPhone6 PlusとかiPad retinaとか、もはやついていけないくらいに端末数が増えているので、さらに画面とアイコンを準備する必要がありそうでもう挫折しそうです。

こういう作業をささっとやるにはMacBook Proとか画面が大きい端末で作業したり、落ち着いたカフェとかのテーブルでマウス使って作業すれば捗ると思うのですが、電車内でしかもMacBook Airの小さい画面とかでジェスチャでやったりしていると指と膝がつりそうです。

で、本題のswiftがojbective-cよりも楽、ということですが、これ確かに実感しますね。
まあコーディングが少なくて楽とかいう意見が大多数だと思うのですが、個人的には、ヘッダファイルとメインファイルの2種類のファイルにコーディングしなくて済むというところが大きいですよ。
以前は、MainStoryboard、hファイル、mファイルを、適宜画面を2分割して各々整合性を取りながら書いていかなければならなかったわけです。
これMacBook Airで、狭い電車内でやるのとかストレスが溜まります。
が、swiftはほぼ1ファイルにだけコードを書いていけばいいだけなので、画面を行ったり来たりしなくてすむ分、ストレスがたまりません。

SKLabelNodeの背景色とかどうやって設定するの?

ところで、久々にアプリを作るあたり、簡単なゲームを作るところから始めようかと思った時に、「Sprite Kit」という半端ない開発キットが使えるわけで、試しにやってみたら、これすごいわ。
以前もCocos2d-iphoneとか似たようなのがあって使うことはできたのですが、生来のめんどくさがりやで、簡単なゲーム作る際もxcodeのsingle view applicationプロジェクトのh.ファイルとm.ファイルにベタうちでコード書いてたので全然使ったことなかった。
新しい開発環境の使い方覚えるのとか億劫じゃん。。。
その時間があったら数をこなしたいというか、コードを苦労してたくさん書いたほうが上達が早いんじゃないかとか思っていたので。

個人的には、基本の制御文とタイマー関数の使い方さえ押さえておけば、あらゆるゲームが作れるんじゃないかと思っていました。
シューティングゲームだって、画面外にランダムで敵を表示させて時間の流れとともにその表示を徐々に左に向かってくるようにすればそれっぽくなりそうだし。

でも今回、ちゃんとゲーム開発専用の環境覚えようと思ってSprite Kitをかじってみたら、これすごいわ。
これからガリガリ勉強していきたい。

で、困ったのが、SKLabelNodeの扱い方で。
どうもスプライトキットだと、すべてのオブジェクトをノードとして扱うみたいで、たとえばラベルとかはSKLabelNodeとして生成するみたいですが、その背景色とかってどうやって設定するのだろうか?

以前のUILabelだったら、ラベル名.backgroundColorで背景色のプロパティを変更できたのですが、SKLabelNode.backgroundColorとか使えないみたいだし。
なんとなく、UILabelは、ラベル領域を長方形で作成しているのに対し、SKLabelNodeはテキストのみ作成しているみたいなので、背景という概念がないんじゃないかと思ってる。

そういうわけで、海外で同じような疑問を解決しようとしている人の英文を読んでいたら、その人はSKLabelNodeを作成して、同時にそのテキストを覆う領域に、一枚奥のレイヤに色をつけた矩形領域を設定することで、見た目ラベルテキストの背景色を設定できるようにしていた。

なるほどと思ったけど、余計にオブジェクト作らなきゃいけなくなるので厄介だなあ。
まあ別に細かい話だからどうでもいいのだけど。

シミュレータターゲットに応じてlinker command failed with exit code 1 (use -v to see invocation) が発生する

これ盲点だったのですが。
試しに「testApp」とか適当な名前でアプリを作成したあと、できたっぽいのでちゃんと「catchMask」という正式名称で再度プロジェクトを作成して、テストアプリのプロジェクトと全く同じファイルをコピーしたら、ターゲットの端末に応じて「linker command failed with exit code 1 (use -v to see invocation) 」とかいうエラーが発生して失敗する。
たとえば私の実機iPad miniであればok。シミュレータのiPhone 4sとiPhone 5でも大丈夫。
しかし、iPhone 5SとかiPhone 6とか、新しい端末を選択するとなぜかこのエラーが生じる。
テストアプリでは全くそんな症状はなかったのに。

これも日本語のサイトでは解決できなかったので、海外のヤフー知恵袋みたいなサイトで同じような症状が起きている質問があったのでその回答を読んでみたけど、ようわからんし、質問者もその通りにしたけど無理やった、みたいな状態になっていたので、結局未解決のまま。

しょうがないから、テストアプリのアプリ名を正式なアプリ名に変更した。

なんとなく途中でアプリ名を変更すると、余計なエラーが発生したり管理がよくわからなくなったりしそうで怖いから、なるべくプロジェクト立ち上げ時からアプリ名を変更したくないんですけどね。

さて、とりあえずあとはアプリ申請するだけなので、もうほとんど作業は終わりです。
が、先に述べたように、アイコンをサイズ分作らなきゃいけないとか、いろいろステータス設定したりとか、また余計なエラーが発生する恐れとかがあって、ここからが意外と面倒臭い予感がします。。。

 - アプリ開発, テクノロジー