Ad Hoc配信で社外関係者にiOSアプリを提供できるか?
最近iOSアプリの配布方法を調べる機会がありました。 その時参考にしたのは以下の記事です。
とても詳しくわかりやすかったのですが、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やってみるなら今かな、と思いこちらの本で少し勉強してみました。
本の内容については以下の記事をご参照ください。(著者ご本人による記事で、目次と冒頭部分の概略的なものが載っています) 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まであります。
まぁでも、実際に使うなら2DならSpriteKit、3DならSceneKitを使う方が便利のようです。(これらのフレームワークは以前はOpenGLを使っていましたが、今はMetalに変わったようです)
これから開発するiOSアプリの画面サイズはいくつ?
iPhoneに続きiPadも新型が発表され、また新しい画面サイズが増えました。
AutoLayoutを使って画面サイズに依存しないレイアウトを組んでいればあまり気にすることはないですが、とはいえ動作確認はしないといけませんし、開発者としてはあまり細分化は嬉しくないですね…。
今からiOSアプリを開発するとしたら、対応すべき画面サイズはいくつあるのかまとめました。
前提条件
- iOS11以降をサポートする場合(最新2バージョンをサポートするのがApple推奨です)
iPhone専用アプリ
⇒合計6種類
3.5inch(例:iPhone 4s)
4inch(例:iPhone SE)
4.7inch(例:iPhone 8)
5.5inch(例:iPhone 8 Plus)
5.8inch(例:iPhone XS)
6.1inch(例:iPhone XR) / 6.5inch(例:iPhone XS Max)
※iPhone 3.5inchはiOS11未対応だが、iPad用の画面を作らない場合、iPadでiPhone 3.5inchの画面が拡大表示されるため、実質対応が必要
※iPhone 6.1inchとiPhone 6.5inchは開発時のベース解像度が同じ(896×414)なので同サイズとみなす
iPad専用アプリ
⇒合計4種類
※iPad 7.9inch と iPad 9.7inchは開発時のベース解像度が同じ(1024×768)なので同サイズとみなす
iPhone&iPadハイブリッドアプリ
⇒合計9種類
発売済Android端末情報を探すには
iOSと違い、Androidは数多くのメーカーから発売されているため、 どんな端末が世の中にあるのか全て把握するのは容易ではありません。
できるだけ正確な発売済のAndroid端末情報(端末一覧)がないか探していたところ、 本家Googleから入手する方法を2つ見つけました。
Google Play Consoleの端末カタログ
Google Play Consoleに少なくとも1つアプリをアップロードしている場合限定になりますが、下記リンクの「アプリの対応端末を確認する」の手順で端末カタログ(CSV形式)をダウンロードできます。 support.google.com
端末カタログにはメーカー、モデル名の他、解像度や画面密度、利用できるOSバージョンなどが記載されています。
掲載項目
- Manufacturer (例:Google、Samsung)
- 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)
ダウンロードしたCSVをExcelなどで開いてフィルタリングすれば、例えば「Android9が使えるスマートホン」など、探したい条件で端末を探すことができます。
ただしこの端末カタログ、元々はアプリをGoogle Playに公開する際に対応端末を指定するためのものですので、 アプリのminSdkVersionなどによっては含まれない端末もあるかもしれません。
Android 搭載端末
アプリをアップロードしていなくても見られるGoogle公式情報だと、こんなのもありました。
仕事用プロファイルと仕事用管理に対応した Android 6.0 以上の端末を検索できます。 (「すべての端末を網羅しているわけではありません」とのこと)
Android端末を探すのって大変ですね。他に良い方法があったら教えていただけると嬉しいです。
小数点以下の桁数を指定して四捨五入
データを整理していたら昔Objective-Cで書いたソースコードが出てきたので、Swiftに書き直してみました。
引数はどちらの言語でも value: 四捨五入する値、scale: 小数点以下の桁数 です。
Objective-C
+ (double)round:(double)value scale:(NSInteger)scale { NSNumber *number = [NSNumber numberWithDouble:value]; NSDecimalNumber *before = [[NSDecimalNumber alloc] initWithString:number.stringValue]; NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:scale raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; NSDecimalNumber *after = [before decimalNumberByRoundingAccordingToBehavior:handler]; return after.doubleValue; }
Swift
func round(value: Double, scale: Int16) -> Double { let number = value as NSNumber let before = NSDecimalNumber(string: number.stringValue) let handler = NSDecimalNumberHandler(roundingMode: .plain, scale: scale, raiseOnExactness:false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false) let after = before.rounding(accordingToBehavior: handler) return after.doubleValue }
実際に実行すると以下のようになります
let rounded1 = round(value: 123.456, scale: 2) // 123.46 let rounded2 = round(value: 5.4321, scale: 1) // 5.4 let rounded3 = round(value: 7.89, scale: 0) // 8
『詳解 Swift 第4版』
久しぶりにSwiftを使うにあたり、結構忘れているので改めて勉強し直したくなりました。
https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html
まず始めに参照したのはAppleの公式ドキュメント。ただし全て英語です。
とはいえ割と読みやすいです。『A Swift Tour』を読めば基本は押さえられました。
しかし『LANGUAGE GUIDE』も全部英語で読んでいては時間がかかりすぎるので、この本で勉強することにしました。
公式ドキュメントの完全訳ではないようですが、目次を見るとほぼ同等の知識が得られそうです。最新版の第4版はSwift4に対応しています。
この本では『A Swift Tour』よりも詳細な言語仕様が、サンプルコードと共にわかりやすく説明されています。全568ページあり、これ一冊あればSwiftの文法は十分でしょう。
注意点としては、この本はあくまでSwiftの言語仕様について書かれた本なので、UIKitなどiOSアプリの作り方については一切触れられていません。よって、iOS開発初心者には向いていません。Objective-CでiOSアプリ開発経験があり、新たにSwiftの文法を学びたい人に最適だと思います。