刀科の技術学習ブログ

アプリサイドから、web系フロント・バックとAWSによるインフラ領域へ学習を進めていきます。

【Unity IOS】ビルドエラー編 アプリアイコン

※もしかしたらiOSライセンスがフリーだからかも知れません。

UnityからXCodeプロジェクトを出力し、iTunesConectへテストリリースするまでの話。
今までWin環境でのお仕事しかしたことがなく、今回始めてiOSをリリースまで担当することになり、その中で悪戦苦闘しております。
なにしろ初めての事ばかりで、「アイコンどこに登録するんだよ」「登録したけどCFBundleIconsってなに?」と、次々に現れては行く手を阻むAppleの洗礼を受けることになりました。

まずは作業環境

  • XCode 6.1
  • Unity 4.6.1 (作業時は本体ライセンスのみPro、iOSアドオンはFree)

出力するIPA?の形式

  • デプロイターゲット iOS 8
  • 対象デバイス Universal

TestFlightにアップする為にアーカイブ→submitとしたところ、「iOS7以上に必要なアイコンが設定されてないぞ!」とXCodeさんに怒られました。
アプリアイコンを登録するImages.xcassetsには、アプリアイコングループが作成されていたのですが、怒られた理由となるサイズ設定がいませんでした。
しかも表示されてるペインからはみ出てよく見えないし、Apple嫌いが進みました。

とりあえず新規にアプリアイコングループを作成して、作成したグループをShow in Finderして、必要なファイルをそこにコピーする。
コピーしたら、適所にアイコンをちまちまと登録。
アーカイブ→submit、「CFBundleIconsにアイコン名がないんだけど?」とさらなる敵が現れました。

このエラーはここを参考にしました。
が、CFBundleIconsって項目がInfo.Plistにありません!!笑
恐らく経験の長いApple開発者ならば、この問題もあっさり解決出来ることなのでしょう。

無い時は自分でInfo.Plistに項目つくればいいようです。
Info.Plistのトップ項目のとこから+ボタン押して、そこにCFBundleIconsと名前つけて追加します。
すると何故か「Icon files(iOS 5)」という名前に変わりやがります。
項目名が変わる意味がわかりません。Apple嫌いが進みました。
ともかく、このIcon files(iOS 5)→Primary Icon→Icon filesのアイテムとして、アイコングループに使ったアイコンファイル名を、拡張子付きで追加することで解決します。

Appleの仕来りはよく知りませんが、Web上の情報ではappicon-icon-XX.pngのような、「appicon-」を付ける内容もありましたが、今の環境では有っても無くてもいいようです。
つうか、アイコングループに登録した時点で反映してくれればいいのにな〜。

【Unity】UGUIで多ディスプレイ対応な作り方

UGUI使った場合の、ディスプレイサイズを気にせず見た目を似せるためのメモ。

実現したいことは、アスペクト比10:16の縦画面シーンを、Android等の多ディスプレイにも手軽に対応したいという、怠け者の発想。

ルートとなるCanvasの設定はこれ
f:id:gale08:20141225230456j:plain

いわゆるFullHDな1200×1920な画面をベースとして、伸縮してくれるような設定。
Gameタブの画面サイズ設定で480×800に設定して表示される画面と、SH-06Eの縦画面とでほぼ似た見た目で表示できた。

この後、左右対称にオブジェクト配置しようとして、「単純に子要素のRect Transformをいじればいいんだろ~w」ってやったらえらい目にあった。
NGUIを使ったことが無いから比較できないけど、Rect Transformの振る舞いの変化どうにかできんものか。
これはまた次回にメモる。

【Unity】UnityVS 使い方メモ

個人的な作業メモです。

・MonoBehaviourの実装可能な関数(Onなんちゃら系)の選択してコード生成
 コードエディタ内で右クリックし、[Implement MonoBehaviours]を選択する。

・MonoBehaviourの実装可能な関数(Onなんちゃら系)を検索候補から選んでコード生成
 コードエディタ内で右クリックし、[Quick MonoBehaviours]を選択する。
 検索したい名称を適当に入力すると候補が出てくる。

・競合・名前空間の解決
 赤線が引かれたコードを右クリックし、[競合の解決]を選択し、任意のものを選ぶ。

【Android】DocumentsContract.getDocumentIdの戻り値

お仕事で直面したネタ&メモです。

DocumentsContract.getDocumentId(contentUri)の戻り値が、4.4系と5系で変わってた。
些細な内容なので軽くメモ。


前者は”:”をセパレータとしたKeyValueフォーマットで、webで見るサンプルコードはコレで書かれたものが多いです。

String returnStr = DocumentsContract.getDocumentId(somethingUri);
String id = returnStr.split(":")[1];

こんな感じ。

後者の5系ですが、Nexus7で同じAPIたたくと、String型のID値だけが返ってきていました。
つまり、前者のKeyValueフォーマットのValue部分だけが戻ってきます。
KeyValueフォーマットで返ってくる前提で、String.split(":")[1]な書き方してると、ArrayIndexOutOfBoundsExceptionが出ちゃいます。

単にValueを取るだけならば、

String returnStr = DocumentsContract.getDocumentId(somethingUri);
String split = returnStr.split(":");
int splitIndex = split.length - 1;
String id = split[splitIndex];

こうすれば問題なし。

【Android】 WebViewで未アクセスドメインに事前Cookieをセットしてハマッた事

とあるお仕事で、WebViewでの画面遷移がうまくいかない現象が起こりまして、サーバー側の人にログを吐いてもらったらCookieが送られてなかったって話です。

簡易的に流れを再現すると、
 アプリ内WebViewで、ドメインAのURLにアクセス
    ↓
 この時に発行されるCookieを、まだアクセスしていないドメインBのCookieとして、
 CookieManager.SetCookie()してあげる
    ↓
 リダイレクトでドメインBのURLにアクセス
    ↓
 先ほどセットしたはずのCookieがついてない
こんな感じの流れ。
ちなみにこの現象は4系では発生しないようですね。

ソースレベルで詳しくは追わなかったけど、
解決方法としてはドメインBにアクセスしてからリロードすることで、1度目のアクセスではCookieを認識できなかったのに、リロードするとちゃんとCookie付きでアクセスできた!

ネット上でいくらか探してみたんですが、同様の記事が見当たらなかったのでブログに書いて残しておきます。
web系のことはよく知らないので日々勉強ですが、「そもそも、やってる事がBADケース」などご意見あれば、是非ともお願い致します。

【node.js】VisualStudioをIDEとして使ってみる

node.jsで使えるIDEがないかなーと思っていたところ、なんかVisualStudioでいけるっぽいので使ってみました。(※環境はVisualStudio2013 web Expressです)

一般的にはcloud9をつかうんだと思いますが、ブラウザから使うってことは通信できないとダメなのかが心配だったりでよく調べてませんでした。

とりあえず何も気にせず使えたのですが、プロジェクト作成時のカテゴリが「TypeScript ⇒
node.js」となっていたので、まさかと思いつつプロジェクト作成。
中を見てみるとソースコードはしっかりTypeScriptが使われていて、ビルドすることで同じ場所にJavaScriptが出力されるようになっていました。

元々node.jsとTypeScriptの仲がいいのでしょうか。
フロントサイドの技術にTypeScriptを勉強しようとしたときに、「node.jsにコンパイラが付いてるからそれを使え」というような状況だったのを覚えています。

背景はともかく、C#Javaのようなクラス指向のコーディングがある程度実現できるのと、前と後ろで同じTypeScriptで書けるのは、これから勉強を進める自分には有利!
今までアプリ側ばかりで、これから自学ながら本気でサーバーサイドを学ぶので、覚えることを減らせてラッキーでした。

載せれるようなコードはまだ書いてないので、webAPIでも一つ作ってからやったことのメモかねて載せようと思います。

【Node.js+Express】Expressでコマンド:expressが通らない

node.jsの環境構築備忘録

AWSにNode.jsでサーバーたてようと、ローカルで環境構築(再現練習)しようと「express アプリ名」やってみたところ、コマンドが通らない!
Expressの雛形生成のやり方が変わったみたい。

前にもnode本を見ながら同じコマンドを実行してアプリの雛形を作ったのですが、上記のコマンドが通らないって怒られてしまい、Expressのインストールフォルダを見てみたらcmdファイルが見当たらないことに気づきました。

どうやら今はExpressと別にExpress-Generatorっていうのをセットでインストールしてあげる必要があるみたいです。
下記のインストールコマンドでインストールできる。
[npm install -g express-generator](Expressをグローバルにインストールしたので-gオプションつけた)


インストール後は冒頭にあるexpressコマンドで、無事にアプリ雛形が生成できました。