2016年8月30日火曜日

今回は、iTunesConnectでのアプリスクリーンショットの簡易提出関連の覚書です。

iPhone、iPadとも最大サイズのスクリーンショットをアップロードすればよくなりました。

  • iPhoneは 5.5inch サイズの1242×2208
  • iPadは Proサイズの2048×2732

当然、最近はAutolayoutで作っているので、640x960、640x1136、750x1334、1242x2208、・・・などと解像度が違えば、表の表示個数が変わったり、細かな違いはあるものの大枠は同じです。 ありがたく使っちゃいましょう。(新しく作ったアプリが、ユーザの方にウケたら、イロイロ凝るという戦略もアリでしょうw) 

解像度の違うマシンも画面かも知れないことのヒントも兼ねて、iPhoneへのはめこみ合成をしましょう。  現在、LaunchKitが使えないので、そーいう時は iPhone Screenshot MakerなどでiPhoneへのはめ込み合成をします。
文字入れとか凝ったレイアウトなんかは power pointとか使うこともあります。 そのときは21.03cm×37.389cm(iPadは proの1/2サイズで17.37cm×23.13cm)の画像を作って、多少解像度が違うところは Macのプレビューでサイズ変更すのが楽ちん。 どうせ、プレビューの書き出しでαチャンネル無しにしたるするしねw


2016年8月26日金曜日

ハマったことシリーズ No15.

今回は、swiftでiOSのバージョンが特定値以上かを判定するお話です。

以下のようなコードで iOS8系か、iOS9系かを判定していました。
ios8VersionFlag = Float(UIDevice.currentDevice().systemVersion) < 9

しかし、バージョンが 9.1などならいいのですが、9.3.4などとなると Float("9.3.4")というのはFloatに変換できず、nilとなる。 つまり、(nil < 9)の結果として、Flagがtrueとなってしまい、障害の原因となっていました。(see→補足)
最終的には、こんなコードにしました。 これなら安心。
ios8VersionFlag = UIDevice.currentDevice().systemVersion.compare("9.0.0", options:.NumericSearch ) == .OrderedAscending

2016年8月24日水曜日

ハマったことシリーズ No13.

今回は、UITextFieldのinputView に穴のあいたキーボードを設定しようとした話しです。


下のUIButtonが操作できるように、穴があいているキーボードをUIViewを継承して作ろうと思いました。 穴の部分は、そのUIView自体で、色をclearColorにして、タッチイベントをnextResponderに伝えようにしすればいいかなと。
穴でない部分は、普通のボタンなどを貼るつもりでした。

が、実際に作ってみると、ダメじゃん!! 

穴ない(ブラー??)、タッチイベントも通らない。 きっと、下地として UIViewがあるんですね。 


つまり、この方法はムリっぽいのね。 自力でやるしかないか。。。

ハマったことシリーズ No14.

今回は、複数Macでの開発に伴う試行錯誤の覚書です。

証明書のコピー




Organaizerで、「何度も キーチェーンのアクセスのID/PW入力がでる現象」


  • iOS Developer、Apple IDの秘密鍵のアクセス制御を、「これらのアプリ~常に許可」に ”xcode”を指定
  • iOS Distributionの秘密鍵は xcodeで常にではなく、全てのアプリに許可にする。(なぜ?w)
  • 証明書は 信頼 > 「システムデフォルトを使用」 にしておかないと、iTMS-90034エラーが出る。(上記現象を直す試行錯誤として、「常に信頼に」したらダメだった)


2015年2月19日木曜日

今回は、プログラミング関係で 先人達に学んだことを、つらつらと。


●写真編集系アプリでよくある 他のアプリとの連携はどうすればいいか?
UIDocumentInteractionControllerは、instagramと他のアプリとの両立方法が難しかった。参考になるのはこれ!

Stackoverflowの記事「UIDocumentInteractionControllerDelegate methods not called when open system apps like Mail, Messages, Twitter or Facebook
この記事で、 instagramには 「**.ig」ファイルを 他のアプリには 「**.png」ファイルを渡せるようになります。 質問者と回答者が同じなのが面白いw
Option付き(presentOptionsMenuFromBarButtonItem+ documentInteractionControllerWillPresentOptionsMenu)だと、なぜか うまくいかない…

Cocoaの日々の記事「UIDocumentInteractionController にファイルを別名で渡す」
ファイルが二ついるのだけど、二つセーブするのは非効率なので。ハードリンク使えばいいじゃん!という思いつきにつながった記事。 結局うまくいかなかったけどww

※Instagramアプリが 拡張子igだけでなく pngなどをサポートすればすむことなのだけど。。。w
※UIActivityViewControllerは、出てくるアプリの数が少ない。 LINEやInstagramを加えるにはカスタムを追加しなければならない。。。


●Flurry SDKを Swiftから使う
アプリの分析を無償で出来ることで有名なサービス。知らなかったけど、Yahooが買収したのですね。

Qiitaの「iOSでFlurry Analyticsを使ってみる」
makotton.com の「iOSにFlurry SDKを導入する」
この2つの記事は Objective-Cの場合ですが iOSで Flurryを使う手順が書いてあります。

AdMax Tech Blog の「【iOS】BridgingHeaderの使い方と設定方法」
この記事は、Objective-Cのライブラリを Swiftから使えるようにする手順が書いてあります。


●SpriteKitを使っているときの Pauseの話
バックグラウンドからの復帰時などに Pauseしない。。。 という障害を直すのに参考になった情報のリストです。

CODE NINJAの「Pausing a Sprite Kit Game, Correctly」
この記事がパーフェクト! ほかにも下記のような記事がありました。
http://stackoverflow.com/questions/19014012/sprite-kit-the-right-way-to-multitask


stackoverflowの「Difference between paused property of SKScene and SKView」
これは、タイトルのままですが pauseプロパティを持つものが2つあるので 何が違うの?という話。

shinyaohira / App States and Multitasking.mdの「アプリの状態とマルチタスキング」
アプリの状態遷移の話。 AppDelegateの各関数がどのタイミングで呼ばれるか?という話。





2015年1月21日水曜日

今回は、お勉強中のプログラミングの話。

レスポンシブとかアダプティブとかが流行ってるし(細かな違いは分かってないのですがw)、iOSのプログラミングもマルチ解像度時代ということで、ぼやっとしか理解できていなかったAutolayoutをお勉強しました。

かなり個人的なメモですが、いろいろ先人の情報を見て やっと腑に落ちたので公開します。

PinだとかAlignとかイロイロあるけど、分かりやすい解説はいっぱいあるし(例えばこれ)、バラバラには分かる。 分かるけど何か もやっ と引っかかっている。  理系なので、根底の原理原則のレベルで理解したい :-)
どの制約も制約編集画面(「Attributes Inspector」)を見ると 「First item」、「Relation」、「Second Item」、「Multiplier」、「Constant」が出てくる。 結局、どの制約も最終的に これらのパラメータで表せるっぽい。


FirstItem = multiplier × SecondItem + Constant

分かってみると簡単で、これらのパラメータは上式のような関係になっていて、等式だけではなく Relation ≦ ≧ という不等式も表せる。というものでした。 

Aspect Raitoも muliplierに1:2とか表示される。 これは 1/2 = 0.5 ということで、View.Width = 0.5 * View.Height つまり W:H=1:2となるわけですね。 簡単カンタン

で、Leadingは 左側のx座標で、Trailingは右側x座標だから、View.Leading = 0.5 * Superview.Trailing とかすると、親ビューと左右中央に 子ビューの左端が揃うわけですね。(multiple = 0.5 のときは View.Leading = Superview.centerXの方が直観的ですけどねw)。 で、20pixelマージンが欲しければ、View.Leading = 0.5 * Superview.Trailing + 20 とかすれば良いんだ。

最後に、size classと組み合わせた例が moving gifもあいまって、英語だけどわかりやすかったのでリンクを貼っておきます

もしかしたら続くかも… なので、その1ww 


2014年10月26日日曜日

こっそり、普段使いのシンプル電卓 malc(マルク)のバージョン: 1.21が公開になってます。 iPhone6/6Plusの画面解像度に最適化しました。


今日は、レビューへの誘導の話

ストアに★をつけてもらったり、コメントを書いてもらうレビューを書いてもらえたら、開発者として励みになるし、マーケティング効果も高いことは有名ですね。
有用なコメントをもらったり、好意的なレビューをしてもらうテクニックとして、レビューへの誘導タイミングや誘導方法が重要という情報もよく目にします。

いろいろ見てて、参考になる と思ったのは たとえば下記のようなWebページ
レーティング誘導で好評価を貰うには
アプリのレビュー評価はASOに効く!

「誘導は ある程度使ってもらってから」「ゲームならステージクリアしたときなど気分が良い時に」「好評価の工夫として”面白いので評価する/つまらないので評価しない”という誘導の文言にする」などがなるほど!と思いました。


私は、他のアプリを使っていても、起動直後にダイアログを出すものしか見たことがなく、とにかくウザイという認識でした。  そもそもmalcではAdも計算結果を表示した後に出すようにして、邪魔しないように気を付けているし、レイティング誘導は もっともっと 「とにかく邪魔しないように!」「余分なスペースを使いたくない! ということで、Adの領域に誘導バナーを出すことにしました。

iAdのようなデザインでレビュー依頼のバナーを相方に作ってもらい、2%の割合でレビュー依頼を出すようにしました。 これならモーダルダイアログではないのでユーザの作業に割り込みませんし、専用のスペースも取りません。また、何度も誘導されるのもウザイので、一度タップしてもらえれば二度と出ないようにしてあります。

そして、タップされたら、SKStoreProductViewControllerを使って AppStoreに誘導します。 ストリームで飛ばしてしまうとストアアプリに移動してしまいますが、この方法なら、アプリを出ないので元の画面にすぐに戻れ、わざわざ協力してくれた人に負担が少なくていいかと思います。

たくさん、★がつくといいなぁww