iOS開発豆知識
佐久間 捷矢(ppengotsu)
ver:0.0.5(開発途中)
私
• 佐久間 捷矢
• twitter:ppengotsu
• ブログ:https://blog.ppen.info/
• iOSアプリの開発の仕事
‣ 最近は、VRとかUnityもちょっと手を出しは
じめたー。iOSはSwiftで書きたい派
このスライドとは
• 対象:iOSエンジニア以外も(ディレクターとか)
• 内容:iOSアプリ開発について知っておいた方が
いいなーと思う事
• 間違いがあったら、コメントください
‣ Twiiterでppengotsu宛でもなんでも
プッシュ通知
Swift
Swift
Swift
Swift
Swift
Swift
Swift
ATS問題
強制アップデート
SearchAPI ストアリジェクト
多言語対応
開発周期
QuickAction
センサ
Androidとの違い
Swift
Swiftとは
• diOSアプリを開発するために使う言語
• 古いものをObjective-Cという
• 日本語と英語なぐらい違う
• 現在は、バージョン2
• 公式:https://developer.apple.com/
swift/
なぜ、Swift?
• プログラマーには、書きやすい
• AppleがObjective-CをSwiftに寄せてる。。
‣ Objective-CからSwiftへ自動変換のため?
‣ Swiftがそろそろ生まれて2年。。
➡ Objective-Cでの寿命も残りわずか?
➡ 突然のサポート外!!
➡ Swiftで作るしかない!!!
Swiftにすると幸せ?
• プログラマーはモチベ上がります
• QiitaとかみるとObjective-Cの新しい記事がほ
ぼない。。。
• Swiftの新しい記事は多い
• 本もSwiftばっか。
• 勉強会もSwiftばっか
• WWDC(Appleの発表会)もサンプルはSwift
オープンソースだ
• GitHubで公開された
‣ https://github.com/apple/swift
オープンソースだ
• Swiftがオープンソースになったぜ。
‣ サーバ側も対応
➡ http://www.moongift.jp/2015/12/
perfect-%E3%82%B5%E3%83%BC
%E3%83%90%E3%82%B5%E3%82%A4
%E3%83%89%E3%81%A7%E5%8B
%95%E4%BD%9C
%E3%81%99%E3%82%8Bswift%EF%BC
%81/
どう変わった?
• Swiftの開発に世界中から意見やソースが注がれ
る
‣ どんどんよくなるはず
• 今後の動きがわかる
‣ 新しいSwift3が、2016秋公開とか
• サーバ側もSwiftで開発できる
• MacOS X以外にもLinuxでも動く
今後の対応
• Swift2.2を2016春リリース予定
• Swift3を2016秋リリース
‣ Swift3では、破壊的変化があるので、すくな
くとも半年前から対応する必要があるでしょ
う。
プッシュ通知
プッシュ通知とは
• 右みたいのみた事ありますよね?
• ユーザにお知らせを出したり

時間を通知したりできる。
‣ ユーザにアプリの存在をアピール
➡ ユーザが戻ってくるかも
➡ アプリが継続利用されるかも
SmartNewsさんの例
プッシュの仕組み
• 普通のプッシュ通知するとき
Appleサーバユーザ あなたのサーバ
1:〇〇IDに

プッシュ送って
2:プッシュ送信
3:画面に通知。

音もなったり
プッシュの仕組み
• ローカルプッシュ通知するとき
Appleサーバユーザ あなたのサーバ
2:画面に通知。

音もなったり
1:通知送信
プッシュの仕組み
• サイレントプッシュ通知するとき
Appleサーバユーザ あなたのサーバ
1:〇〇IDに

プッシュ送って
2:プッシュ送信
3:画面に通知。

音もなったり
プッシュ使い分け
• 普通のプッシュ
‣ お知らせなど出すときに。
‣ サーバの状態によって出したり。
• ローカルプッシュ
‣ 端末の状態だけで決まるお知らせ。
• サイレントプッシュ+ローカルプッシュ
‣ ダウンロードが終わった時に通知したいとき
プッシュ注意
• 送りすぎてはいけない。
‣ 昔、やたらプッシュうつアプリがありました
‣ うざいのである。
➡ ユーザがアンインストールするかも
プッシュ注意
• プッシュを送る前に事前に許可を求める必要あ
り
妖怪ウォッチぷにぷにさん
の例
プッシュ注意
• 事前の許可は、起動直後でなくてよい
‣ チュートリアル終わった後
‣ ある程度アプリ起動されたら
➡ ユーザが、いいなと思うタイミングで許可
をもらうとスムーズかも。
ATS問題
ATS
• iOS9から対応必須
‣ ネット通信に制限
➡ 通信を暗号化するものしか使えない(https)
➡ http://blog.ppen.infoみたいにhttpで始ま
るものにアクセスできなくなる
ATS、なにが問題?
• APIは全てhttpsで通信してますか?
• ブログは、httpsでアクセスできますか?
• 会社のホームページは大丈夫?
• Safariからも開けなくなるかも?
• Google検索もhttpsじゃないと不利っぽいよ
‣ http://googlewebmastercentral-
ja.blogspot.jp/2014/08/https-as-ranking-
signal.html
ATS対応ってええの?
• httpsに対応した
‣ 通信が暗号化されます。
‣ 指定したサーバと通信していることがだいた
い保証されます。
‣ https2やSpdyに対応できます。
➡ 詳しくはかかないけど、webページの読み
込みが早くなったりする。
ATSに対応したい
• SSL証明書を入手だ
• 無料も有料もあるよ
‣ 企業レベルで、存在を証明できるかどうかとか
違う。
‣ https://www.symantec.com/ja/jp/products-
solutions/families/?fid=ssl-certificatesd
• http://www.websec-room.com/
2015/11/30/2363
強制アップデート
強制アップデート?
• アプリを久しぶりに起動
‣ AppStoreに飛ばされた
‣ アップデートしろってアラートがで続ける
• 上記みたいなことなかっただろうか?
なぜ?
• 最新のアプリをつかってほしいから
• アプリとwebサイトの最大の違い
‣ アプリは、古いものをいつまでも使える
➡ バグがあってもそのまま使われちゃう
なぜ?
• 市場でアプリのバージョンがバラバラだとサポー
トが大変!!
‣ APIをそれぞれのアプリバージョンごとに準備
するなんてくそ!!
• ユーザが、手動更新してくれるなんて考えられな
い
どうすればええの?
• アプリ起動時に、サーバのサポートアプリバージョ
ンを取得するようにする
• APIアクセスするときにサーバのサポ∼とアプリ
バージョンみるようにするなど
• 絶対強制アップデートするって必要はない
‣ プッシュと同じで、アップデート間隔が短いア
プリだとうざくなってしまう
SearchAPI
SearchAPIって
• iOS9から、SpotLightが復活
‣ 検索対象が、アプリやwebサイ

トになったよ
COMICOさんの例
検索対象に登録
• アプリから検索対象にしたいものを登録できる
‣ アイコンやタイトル、説明などなど
• 登録範囲
‣ 端末内だけに登録
‣ 他のユーザにも見えるように登録
➡ 個人情報でないものは、他のユーザに見える
登録でよさそう。
なにがええの?
• 他のユーザに見えるように登録すると、アプリ
インストールを促せる
• アプリの履歴に、簡単アクセスできるようにな
る。
• まだ、すごいってアプリがないので狙い目?
‣ 参考:http://qiita.com/mono0926/items/
27af791065ed919255e0
• 今後、どんどん使われていくかも
参考
• web対応チェック
‣ 公式
➡ https://search.developer.apple.com/
appsearch-validation-tool/
ストアリジェクト
Appleの審査
• Appleが提供しているストアに
iOS ,AppleTV,Macでのアプリを出すには

審査があります
• 申請してから、2週間ぐらいで結果が帰ってき
ます。
• リジェクト→不合格→審査→リジェクト→。。
リジェクト理由
• よく聞くのを、下記に示す
‣ アプリが単純すぎる
➡ 機能が単発だと言われちゃう
‣ バグでアプリが落ちる
➡ 審査中にアプリが落ちると言われます。審査
はちょっと特殊な環境のときがあります。リ
ジェクトされたときに、動作環境を聞いてみ
よう
リジェクト理由
• エロすぎる
• ユーザの体験を邪魔する
‣ Appleのストアで、エロのは出せません。
‣ ユーザ体験を邪魔してはいけない。
➡ あるけどって思った?
➡ まっくろな方法がある。
ストアリジェクト
真っ黒な対策
審査の抜け道
• 審査が問題
‣ 審査を通過したい。。。
➡ 審査の時だけ、健全な挙動すれば。。。
• 上記のように、審査中だけ健全な挙動だけすれ
ば審査に通るらしい。
‣ リリースしたあとに、不健全に!!
‣ Appleにばれるとバンされます
審査に必要なもの
• 審査は、実際にアプリを使われます
‣ ライブラリを自動検索して、だめなものをつ
かっているとバレます。
‣ ログインが必要なアプリの場合は、テストアカ
ウントを教えてあげましょう。
‣ 審査までに、サーバの実装は終わっている必
要があります。
審査に必要なもの
• アプリのスクリーンショットや、iTunesでの説
明文やアプリ規約文書などです
• アプリの動作がわかりにくい場合は、動作中の
動画をとっておくといいですね。審査で必要って
いわれるかも
ストアその他
• ストアは、各国ごとにそれぞれ分かれています。
‣ なので、各国ごとに、ダウンロードできるア
プリが違います。
➡ 例えば、アメリカのストアにAアプリあるけ
ど、日本のストアにはないなど
トップを狙え
トップを狙えとは
• AppStoreでおすすめに乗る
‣ 新しいiOSの機能を使ってい

と選ばれやすそうに見える
‣ AppleWatchが出たときは

Watch対応のアプリがよく

でていたようなかんじ
乗ると
• タダで、宣伝になる
• 乗ると自慢できそう
‣ 僕はのったことまだない。。。
• ランキングよりうもれることがなさそう
‣ ランキングは、闇。お小遣い稼ぎアプリと
か。。。ちょっとずつ浄化してるけど。。。
多言語対応
多言語対応
• iOSアプリは、コードで設定しておくと、

端末の設定によって表示言語が変わります。
• ストアに載ってる説明も動作環境によって表示言
語が変わります。
どうすればいい?
• アプリは英語に基本対応
‣ 日本語は、追加対応にしておく
➡ すると、日本語の環境では、日本語表示
➡ その他の言語圏では、英語で表示
➡ 上記が、一番楽な対応です。最低でも英語あ
れば、なんとかなりそう。
あとで多言語対応?
• 1つの言語しか対応してないと後からはほぼ無
理。。。
‣ 自分がそうでした。。。。
‣ コードで多言語に対応するには、それようの
コードを前もって書く必要がある。
‣ 工数さえあれば、できなくないけど。。。
開発
開発
• 開発で使うツール、環境など書く
開発環境
• Mac 系列のPC
‣ 比較的新しいMacbook系がいいです
‣ MacProがいいです。
• Xcode
‣ Appleが提供するエディタ
‣ 無料
‣ これで十分
• Swift
‣ プログミング言語。今はこれ使え。
開発環境
• Unity,UnrealEngine
‣ ゲーム作るなら使うもの
‣ 3Dや2Dのものを扱いやすくしたエディタ
‣ このごろ無料になった
‣ 有料の機能を使うともっとすごい
開発アカウント
• ストアに出すには、年間約1万払って、アップル
デベロッパーアカウントを取得
‣ 実機にインストールするだけなら、このごろ無
料になった。Xcode7を使うとできる。
• 社内配布専用のデベロッパーアカウントもある
‣ 有料
‣ ストアでなく、社内だけで配布できる
‣ テストで、社内配布するならほしいもの
iOSのCI
• iOSでも継続インテグレーション
• CircleCI,TravisCI
‣ 自動でビルドしてくれる環境
‣ Gitにプッシュしたら、テスト実行とか
• Jenkins
‣ 自前で、ビルド、テスト実行や配布などを行え
る
iOSのCI
• fastlane
‣ 最新のツール
‣ ビルド、テスト配布、ipa作成、アプリ申請などが
自動化
‣ まだつかったことないです。。
‣ 上記であげたものは、開発においてめんどうなと
ころなので、自動化できるとよい!
‣ 参考:http://qiita.com/appwatcher/items/
a3280ecdef7e4d9e5e24
テスト配布
• アプリをテストするために、配布する
• DeployGate
‣ もともとmixiのツールだったはず
‣ インストールが簡単。Androidもできる
• TestFlight
‣ Appleが買収したツール
‣ iOS対応。Android無理になった
テスト配布
• Crashlytics
‣ iOS,Android対応
‣ クラッシュレポートでも有名
‣ 参考:http://dev.classmethod.jp/
smartphone/iphone/ios-fabric-crashlytics-
beta-distribution/
新しいiOS
新しいiOS
• 毎年でます
• 新しいiPhoneと一緒に出ます
• 毎年9月ぐらいに出ます。
• 6月ぐらいの発表会で、新しいiOSのベータが開
発者に配布されます。
‣ 6月から9月までの間に対応する必要がありま
す。
新しいiOSに対応?
• 新しいXcodeを基本使います
• 新しいiOSでは、今まで使えたコードが使えな
い、挙動が違う問題が起きたりします。
‣ 新しいiOSで、代わりのコードを使って修正
‣ 新しいコードの方が、使いやすくなっていた
りします
対応すると?
• iOS9に対応すると
‣ SearchAPI
‣ 外部リソースダウンロード機能
‣ QuickAction
• などのユーザ体験に影響与えるものを使える。
対応しないと?
• iOS9上では、互換モード動作
‣ ATS問題なんて起きない
• 基本、そのままでも動きます。
‣ 新しい機能が使えない。
‣ もし、端末のサイズが大きいとアプリ内の画
像がぼやけるかも
対応方法
• 6月にベータ版が、開発者に配布されます
‣ 実機にインストールしてアプリ動作確認できま
す
• 9月ごろに正式版が公開されます
‣ 一般のユーザに配布されます。
‣ 最近は正式配布前に、一般ユーザにもベータ
配布っぽいのがあります。
対応方法
• 6月にベータが配布されるため、6から9月の
間にベータ対応を実地する必要があります。
‣ ただし、仮対応となります。ベータと正式版が
同じとは限らないためです。
対応OS
• 毎年新しいOSができます。
‣ 今は、iOS9
‣ バグや脆弱性がなおると、マイナーアップデー
トがあります(iOS9だとiOS9.2が最新です。9
の後ろの番号増えたりします。)
‣ iPhone4S,5,5C,5S,6,6Plus,6S,6S Plus対応
➡ 最新のOSに対応していても古い端末だとい
ろいろ制限があったりします。
対応OS
• どのバージョンに対応するか?
‣ 古いiOS(iOS7とか)の端末でもストアからアプ
リをダウンロードして使えます。
➡ ただし、開発者が設定する最低サポートOS
バージョンに依存します。
対応OS
• 全部に対応だ
‣ iOS6,7,8,9……………
➡ 開発者が血を吐きます。
➡ OSのバージョンによって実装が変わりま
す。。。。
➡ 古いOSはバグや脆弱性があって安全であり
ません。。。
対応OS
• 最低限サポートだ
‣ 今なら、iOS8.4以上対応がいいと思います。
➡ 一番新しいOS(現:iOS9)と一つ古いOSの最新
マイナーバージョン(現:iOS8.4)
➡ 最近は、一般ユーザのアップデートもはやい
ためです
‣ 一番新しいOS(現:iOS9)の機能をつかっているの
なら一番新しいOSのみサポートもいいですね。
参考
• 公式シェア表
‣ https://developer.apple.com/support/
app-store/
➡ 現在はiOS9が71%らしい
webとの違い
webとの違い
• webサイト作るのと違いを書きます。
• 僕は、フロントエンジニアではないため、推測
部分、間違っている部分がでることはご了承く
ださい。
違い1:動作環境
• web
‣ ブラウザ内(FirefoxやGoogleChromeなど)
➡ Electronも中身はChromium
➡ コードはパースされて実行されます。
• アプリ
‣ それぞれのOS
➡ iOSなら、iOS用のに言語変換されて実行さ
れます。
違い1:動作環境
• web
‣ ブラウザ内(FirefoxやGoogleChromeなど)
➡ Electronも中身はChromium
➡ コードはパースされて実行されます。
• アプリ
‣ それぞれのOS
➡ iOSなら、iOS用のに言語変換されて実行さ
れます。
実行効率悪い。電池を大きく消費する
最適化されるため、実行効率
が良い
違い2:UI,UX
• web
‣ PCかスマフォかで違う
➡ iOS,Androidで同じUIなので、ユーザがOSを行き来し
ても同じ感じで使える
• アプリ
‣ iOSかAndroidかで違う。
‣ OSのバージョンによって違う
‣ 画面サイズに違う
➡ それぞれの場合に合わせたUI,UXが必要。タブレットだ
からいっぱい情報を表示すればいいってものじゃない。
違い3:リリース方法
• web
‣ サーバにソースコードをおくだけ
‣ いつでも入れ替え出来ます
➡ バグがあってもすぐ対応、リリースできる
• アプリ
‣ ストアにアプリデータを提出
➡ iOSアプリは、審査あり。期間2週間ぐらい
➡ Androidは、審査なし。1日ぐらい
• バグがあってもすぐに対応できない
違い4:データ管理
• web
‣ サーバ側に基本もつ(ユーザ名や生年月日など)
‣ クライアント側に、一時キーをもつのみ
➡ 一時キーを無効にすると強制的にサービス
からサインアウトすることができる
➡ 新リリース時に強制的にログインしなおしが
できる
違い4:データ管理
• アプリ
‣ web同様に一時キー保持
‣ アプリ内にある程度データ保持する
➡ アプリで高速起動に表示するため
➡ アプリを終了しても同じ画面で再開
➡ ネットワークがなくても動作することがで
きる
違い5:状態
• web
‣ ユーザは、必要な時にアクセスしてwebページ
をみる
‣ 前回の状態は、ログイン状態ぐらいが再現さ
れる
違い5:状態
• アプリ
‣ ユーザは、使用した時にアプリ起動して使う
‣ アプリは、ユーザ使っていない時もデータの
更新などを行っている
‣ ユーザが再びアプリを起動した際は、最後の
状態が出来る限り高速で再現される
Androidとの違い
違い1:開発環境
• iOS
‣ Swift,Objective-C
‣ Macパソコンが必須です。
• Android
‣ Kotlin,Java
‣ WindowsでもMacで作れます。
違い2:配布方法
• iOS
‣ Appleが提供するストアで配布
‣ アプリを配布、更新するには、

Appleによる審査を通過する必要があります
➡ 審査が終わるまでに2週間ぐらい
➡ ある程度機能が実装されていないリジェクト
される
違い2:配布方法
• Android
‣ Googleが提供するストアで配布
‣ 審査なくアプリを配布できます。
違い3:UI・UX
• 物理ボタン
‣ iOS
➡ ホームボタン1つしかありません
➡ アプリ内でホームボタンは使えません。
違い3:UI・UX
• 物理ボタン
‣ Android
➡ ボタン3つあります。
➡ 戻る、ホーム、アプリ一覧ボタン
違い3:UI・UX
• 物理ボタン
‣ Androidのみ戻るボタンが常にある状態
➡ ユーザいつでも1つ前の動作、画面に戻る
ことが可能
‣ iOSは、戻るボタンがない
➡ 画面を戻るには、画面内戻るボタンがいる
違い3:UI・UX
• 画面遷移
‣ Android
➡ 基本、画面がかさなる遷移
‣ iOS
➡ 画面がかさなるもの
➡ 画面が右から来てかさなるもの
12
1
2
12
違い4:機種
• Android
‣ メーカーごとにいろいろでている
➡ Xperia,Galaxy,Nexus………
➡ 機種ごとに画面の大きさやセンサーが違う
• iOS
‣ 大きく分けるとiPhone,iPad
‣ 画面の大きさの種類は、少ない。センサーの違いは
ある
センサー
iPhone6Sの場合
• TouchID指紋センサー
‣ 指紋を読み取る。パスワード入力省略
• 気圧計
‣ 気圧がわかります。天気予報ででるのです。
• 3軸ジャイロ
‣ iPhoneの傾きがわかります。
• 加速度センサー
‣ iPhoneをどのようにふったかわかる
• 近接センサー
‣ 画面に顔を近づけたかわかります。
• 環境光センサー
‣ 画面に当たる光の強さがわかります。
3D Touch
3D Touch
• 画面を強く押したことを検知できる
• iPhone6s,iPhone6s Plusでのみ使えます。
動作例
• ホームボタンのアイコンを強く押すとサブメニュー
がでる
• アプリ内で、プレビューを出したりするのに使
える。
• 画像リンク:http://www.apple.com/jp/
iphone-6s/3d-touch/
HandOff
どんなの?
• 現在動作中の状態を他のデバイスに引き継げます。
‣ iPhoneからiPhoneへ
‣ iPhoneからMacBookに
‣ MacBookからiPhoneに
‣ 簡単操作で、引き継げます。
‣ 例:マックのサファリで開くと

iPhoneで引き継げます
外部ソースダウンロー
ド
どんなの?
• アプリ内で使うデータを後からダウンロードで
きる仕組み
• Appleのサーバからダウンロードできる
‣ 今までは、自前のサーバが必要だった
メリット
• 自前のサーバが必要でない
• アプリインストール時に、最小容量にできる
‣ ユーザが最小限の時間でアプリを起動できる
‣ ストア配布(LTE時)の容量制限にひっかかりに
くくなる
• 参考リンク:https://speakerdeck.com/
nolili/on-demand-resourceswoyi-shi-
sita-kontentuzhi-zuo-wakuhuro
ビーコン
ビーコン
• Bluetoothで発信機をつくったようなもの
• iPhone4S以上が対応している
• Bluetoothの設定がオンになっている必要あり
• アプリで、大まかに一定範囲に入っているわかk
ります
遠いエリアに入っ
た!!
おわりに
• 今回のバージョンではこれまで。
• 途中飽きてしまったので。。。
• 大きな機能を載せ忘れていたら、更新します。

iOS豆知識ver0.0.5