文系プログラマの勉強ノート

スマホアプリ開発やデザインなどについて勉強したことをまとめています

Ad Hoc配信で社外関係者にiOSアプリを提供できるか?

最近iOSアプリの配布方法を調べる機会がありました。 その時参考にしたのは以下の記事です。

qiita.com

とても詳しくわかりやすかったのですが、Ad Hoc配信に関する部分で気になる記述がありました。(以下一部抜粋)

「Adhoc配布だと契約企業外に配ってもOK」という情報をたまに見かけるのですが、これって本当に大丈夫なのでしょうか。ライセンス規約のどこにも明確に書いてなかったと思うので、本当に信じていいのか困っています。

えっ 書いてないんですか?

私も聞いたことがあったので気になり、Apple公式ドキュメントに何か記述がないか調べたところ、ありました。

Terms and Conditions - Apple Developer

上記URLから「Apple Developer Program License Agreement」を見ると、Ad Hoc配信についての記述があります。 (有料ライセンスは不要ですが、規約に同意しないと見られないようです。そのため規約文の引用は避け、該当箇所を要約した日本語訳のみ掲載します。詳しく知りたい方は「Apple Developer Program License Agreement」内を「Ad Hoc Distribution」で検索してください。)

それによると、 あなた(ライセンス契約者)の組織内、またはあなたと提携している(系列の)人間に、限られた台数の登録済デバイスでの使用を目的にアプリを配布しても良い とのこと。

「提携している(系列の)」(原文では affiliated)という部分の解釈が難しそうです。 企業で考えると子会社や派遣社員はOK、ではそれ以外の受託開発における顧客は…?となりますが、個人開発者だと評価に協力してもらうという名目で友人もOKになりそうです。

2012年の古い非公式情報にはなりますが、Appleのサポートセンターに問い合わせた結果、iOS Developer Program契約者が、ライセンスを持たない外部の顧客企業にAd Hoc配信でアプリを配布して良いと回答があったそうです。

rough-and-ready-co-jp.blogspot.com


ということで確かに明確に書かれてはいませんでしたが、Ad Hoc配信で社外関係者にiOSアプリを提供しても問題ないのではないかと思います。とはいえ、あくまで評価目的で期間限定的な利用に限ったほうが安全でしょう。 (ちなみにAd Hoc配信にはインストール対象デバイスのUDIDが必要で、その登録上限数は年間100台まで、アプリの有効期限は最大1年という制約があります。)

上記はApple Developer ProgramのAd Hoc配信に関するもので、Apple Developer Enterprise ProgramのAd Hoc配信はまた別かもしれません。

⚠️実際にAd Hoc配信を利用する際は、この記事の内容を鵜呑みにせず必ずご自分で公式情報に当たってください。 この記事を参考にした場合のいかなる問題に対しても、その責任は負いかねます。

『Metal入門』

iOS12でOpenGLが非推奨になりました。 Metalやってみるなら今かな、と思いこちらの本で少し勉強してみました。

booth.pm

本の内容については以下の記事をご参照ください。(著者ご本人による記事で、目次と冒頭部分の概略的なものが載っています) qiita.com


こちらの『Metal入門』、一般に流通している本ではなくいわゆる同人誌なのですが、現時点で3Dグラフィックス初心者が日本語でMetalを学ぶのに最適の本なのではないかと思います。

というのも、現時点で日本語でMetalの解説をしている本が(おそらく)他にありません。 Webでも英語がほとんどで、日本語の記事があってもSwiftのバージョンが古かったりMetalKit以前の内容だったりと、初心者がそのまま真似して動くコードではないものが多いです。 あとは、ある程度3Dグラフィックスプログラミングの知識がある前提の内容になっていたり。断片的な解説だと初心者にはつらい…。

こちらの本は現時点で最新の iOS 12, Xcode 10, Swift 4.2 対応。また、本当に入門的な基礎の部分を詳しく解説してくれているので、Metal学習の第一歩にとても良いと思います。

私は

「MTLCommandBuffer と MTLCommandQueue と MTLCommandEncoder って全部使うの?どう違うの?」

「シェーダってよく見かけるけど何?」

という状態からスタートしましたが、その辺もちゃんとわかるようになります。

内容がやさしい分、3つあるチュートリアルを終えてもできるようになるのは画像の表示と画面全体を単色で塗りつぶすところまで。具体的な図形を描くには別のWeb記事などを参照する必要があります。でも基本の考え方がわかった上で読むと大分理解しやすくなりました。

パフォーマンス改善のためのデバッグ方法、SceneKit、ARKitとの組み合わせ方など、発展的な内容も少し載っています。

この本を読んだ後には次のMetalチュートリアルをやってみました。三角形や立方体くらいは描けるようになったかな。raywenderlich.com のはpart5まであります。

www.gaprot.jp

www.raywenderlich.com


まぁでも、実際に使うなら2DならSpriteKit、3DならSceneKitを使う方が便利のようです。(これらのフレームワークは以前はOpenGLを使っていましたが、今はMetalに変わったようです)

SwiftでRSSリーダーアプリを作りました

折角Swiftを勉強し直したので、シンプルなRSSリーダーアプリを作りました。

f:id:an3714106:20181231161714p:plain:w200

購読したいRSSフィードのURLを登録すると、

f:id:an3714106:20181231161729p:plain:w200

最新のRSSフィードを取得し、リスト表示します。(RSS2.0対応)
一度入力したURLは次回起動以降も引き継がれます。

f:id:an3714106:20181231162251p:plain:w200

リストをタップすると、記事のWebページを表示します。簡易ブラウザになっているのでそのままブラウジングもOK。

使用したソースコードはこちら。RSSの解析処理、WKWebView、UITableViewを使った開発のご参考に。
(ご利用は場合は良識の範囲内&自己責任でお願いします) github.com

これから開発するiOSアプリの画面サイズはいくつ?

iPhoneに続きiPadも新型が発表され、また新しい画面サイズが増えました。
AutoLayoutを使って画面サイズに依存しないレイアウトを組んでいればあまり気にすることはないですが、とはいえ動作確認はしないといけませんし、開発者としてはあまり細分化は嬉しくないですね…。

今からiOSアプリを開発するとしたら、対応すべき画面サイズはいくつあるのかまとめました。

前提条件

  • iOS11以降をサポートする場合(最新2バージョンをサポートするのがApple推奨です)

iPhone専用アプリ

⇒合計6種類

  1. 3.5inch(例:iPhone 4s

  2. 4inch(例:iPhone SE

  3. 4.7inch(例:iPhone 8

  4. 5.5inch(例:iPhone 8 Plus)

  5. 5.8inch(例:iPhone XS

  6. 6.1inch(例:iPhone XR) / 6.5inch(例:iPhone XS Max

iPhone 3.5inchはiOS11未対応だが、iPad用の画面を作らない場合、iPadiPhone 3.5inchの画面が拡大表示されるため、実質対応が必要

iPhone 6.1inchとiPhone 6.5inchは開発時のベース解像度が同じ(896×414)なので同サイズとみなす

iPad専用アプリ

⇒合計4種類

  1. 7.9inch(例:iPad mini 4) / 9.7inch(例:iPad 6th)

  2. 10.5inch(例:iPad Pro 10.5inch)

  3. 11inch(例:iPad Pro 11inch)

  4. 12.9inch(例:iPad Pro 3rd)

iPad 7.9inch と iPad 9.7inchは開発時のベース解像度が同じ(1024×768)なので同サイズとみなす

iPhone&iPadハイブリッドアプリ

⇒合計9種類

iPhoneAndroidより画面サイズ少ないと思っていた頃もありましたが、もうあまり変わらないかもしれませんね。

発売済Android端末情報を探すには

iOSと違い、Androidは数多くのメーカーから発売されているため、 どんな端末が世の中にあるのか全て把握するのは容易ではありません。

できるだけ正確な発売済のAndroid端末情報(端末一覧)がないか探していたところ、 本家Googleから入手する方法を2つ見つけました。

Google Play Consoleの端末カタログ

Google Play Consoleに少なくとも1つアプリをアップロードしている場合限定になりますが、下記リンクの「アプリの対応端末を確認する」の手順で端末カタログ(CSV形式)をダウンロードできます。   support.google.com

端末カタログにはメーカー、モデル名の他、解像度や画面密度、利用できるOSバージョンなどが記載されています。

掲載項目
  • Manufacturer (例:GoogleSamsung
  • Model Name (例:Pixel 2、Xperia XZ3)
  • Model Code (例:marlin、SO-03K)
  • RAM (TotalMem) (例:2735MB、3745-3748MB)
  • Form Factor (例:Phone、Tablet
  • System on Chip (例:Qualcomm MSM8998、Mediatek MT6757)
  • Screen Sizes (例:1440x2560、1080x1920;1440x2560)
  • Screen Densities (例:320、480;640)
  • ABIs (例:arm64-v8a;armeabi-v7a;armeabi、x86
  • Android SDK Versions(例:26;27;28、25)
  • OpenGL ES Versions (例:3.2、2)

ダウンロードしたCSVExcelなどで開いてフィルタリングすれば、例えば「Android9が使えるスマートホン」など、探したい条件で端末を探すことができます。

ただしこの端末カタログ、元々はアプリをGoogle Playに公開する際に対応端末を指定するためのものですので、 アプリのminSdkVersionなどによっては含まれない端末もあるかもしれません。

Android 搭載端末

アプリをアップロードしていなくても見られるGoogle公式情報だと、こんなのもありました。

www.android.com

仕事用プロファイルと仕事用管理に対応した Android 6.0 以上の端末を検索できます。 (「すべての端末を網羅しているわけではありません」とのこと)

Android端末を探すのって大変ですね。他に良い方法があったら教えていただけると嬉しいです。