Xcode
iOS
まとめ
Swift
学習

[Swift] iOSアプリ開発 学習の進め方とソース

はじめに

本稿では、iOSアプリ開発に関する初歩的な情報を共有します。
※本稿の情報は2018年7月現在です。

Xcode + Swiftによる開発を前提として記述しています。

私の認識違いなどがありましたらコメントでお知らせいただけると幸いです。

iOSアプリ開発に必要なもの

Mac

iOSアプリの開発ツールの"王道"は、Appleが提供しているXcodeです。
XcodeはMacでのみ動作します。

Windows上でコードを編集できる開発ツールもあります。(本稿では触れません)
Xamarin
Monaca
IBM MobileFirst
しかしこれらを使っても、実機へのデバッグ配布や、App Store公開までの全工程を考慮するとMacは実質的に必須です。

まずはMacの操作に慣れる必要があります。
Mac をはじめてお使いになる方(Apple公式)

Xcode

Xcode(エックスコード)はAppleが提供している、無料の統合開発ツール(IDE)です。

iPhone、iPad、Mac、Apple Watchのアプリを開発することができます。

Apple製品ユーザーであれば、Apple IDはお持ちかと思います。
MacとApple IDがあれば、Xcodeをダウンロード・インストールすることができます。

注意.macOSとXcodeのバージョン
最新バージョンのXcodeをインストールするためには、macOSも最新のメジャーバージョンである必要がある場合が多いです。
事前に、Xcodeのシステム要件と、macOSのバージョンを確認しておきましょう。

App Storeからダウンロード・インストールが基本となります。
ただし、後述するような下位互換の問題で旧バージョンのXcodeを入れたい場合、以下のサイトからダウンロード可能です。
Downloads for Apple Developers

昔はiOS実機でデバッグするには有償のApple Developer Programライセンスが必要でしたが、現在はライセンスがなくても、iOS実機でのデバッグが可能になりました。
(他者への配布はできませんが)

なので、とりあえずハードウェア(MacおよびiOS実機)を調達すれば開発をスタートできます。

Xcodeのメニューは英語です。
また機能が盛りだくさんなので、ちょっと取っ付きにくいかもしれません。

WebサイトでXcodeの操作を学習するのであれば、以下のサイトがお勧めです。
Swift学習・Xcode使い方入門|iOSアプリ開発初心者が最初に知りたかったのはこれ

Apple Developer Programについては後述します。

iOSシミュレータ

XcodeにはiOSシミュレータが付属しており、iOS実機を繋げなくてもアプリを“大体は”デバッグできます。

ただし、シミュレータでは、

  • 加速度センサー、カメラ、マイクなど、一部のセンサー/デバイスを使うテストができない
  • PCキーボードではフリック入力やピンチズームなどの操作がしづらい
  • PC上ではメモリやCPU性能が潤沢なので、性能テストはできない

という制約があります。

iOSシミュレータ ユーザガイド - Apple Developer

Swift

Swiftの概要

SwiftはAppleが開発した新しいプログラミング言語で、2014年から提供されています。
JavaやC#のような静的型付け言語です。

クラッシュを防止できる安全な言語機構を持ち、簡潔な記法により書きやすく読みやすい、モダンでパワフルな言語です。

Swiftの学習ソース

The Swift Programming Language
Apple公式ガイド(英語)です。
この中のA Swift TourをXcodeのPlaygroundで"写経"してみるのがオススメです。

はてな研修用教科書-プログラミング言語 Swift
株式会社はてなさんがGitHubにて公開している、社内研修用の教材です。
※環境はXcode 8.x & Swift 3.xのようです。(2017年10月現在)

逆引きSwift
逆引き形式のサンプル集です。iOSフレームワークの解説がメインです。

Swift学習でのハマりどころ

Swiftのハマりどころはズバリ、オプショナル型と、クロージャーだと思います。

オプショナル型はJavaで言うNullPointerExceptionを防止するための言語仕様です。
こちらの記事が分かりやすいと思います。
どこよりも分かりやすいSwiftの"?"と"!"

クロージャーは日本語では「関数閉包」というようですが、Wikipediaで読んでもさっぱり分かりません(苦笑
こちらの記事の方がピンとくると思います。
クロージャってどんなときに使うの? ~ 利用場面を 3つ 挙げてみる

チュートリアル

Start Developing iOS Apps (Swift)
Apple公式チュートリアルです。

はてな研修用教科書-SwiftでのiOSアプリ開発
株式会社はてなさんがGitHubにて公開している、社内研修用の教材です。
※環境はXcode 8.x & Swift 3.xのようです。(2017年10月現在)

開発ライセンスについて

Apple IDがあれば、開発ライセンスを取得することができます。
一つのライセンスでiPhone、iPad、Mac、Apple Watchのアプリを配布できます。
(自分の端末でデバッグするだけならライセンスは要りません)

ライセンスの種類は大きく2種類に分かれています。

Apple Developer Program

  • アプリをApp Storeで配布するための開発ライセンスです。
  • アプリは配布前にAppleによって審査されます。
  • 個人、法人ともにライセンス取得可能です。
  • 社内用アプリ開発としては実質使えません。
    • Appleの審査で却下されたら配布できません。
    • 審査にかかる期間はApple次第ですので(バグフィックス等も含め)、任意のタイミングでは配布できません。
    • App Storeでの配布なので、誰でもダウンロードできてしまいます。
  • ライセンスは年単位で、円相場で変動します。年間1万円前後です。

Apple Developer Enterprise Program

  • 社内用アプリを配布するための開発ライセンスです。
  • 逆に、App Storeでの配布はできません。
  • 配布にはHTTPSのWebサーバーが必要です。
  • 社外への配布は規約違反になります。
  • Appleの審査を受けずに配布できます。
  • 法人の実在を証明する「D-U-N-S Number」の取得が必要です。(東京商工リサーチに申請します)
  • その他、会社にAppleから電話が掛かってきたり、Web以外での手続きがあります。
  • このライセンスは、アプリを「利用する」法人自身がライセンスを取得する必要があります。受託業者は開発者としてチームに招待される形をとります。
  • ライセンスは年間4万円弱ぐらいです。

両者の違いについて、さらに詳しい情報はこちらが参考になります。
[iOS] Apple Developer Program と Apple Developer Enterprise Program の違い

バージョンアップ問題

運用/保守の観点で知っておきたいのが、iOSおよび、Xcode + Swiftのバージョンアップにまつわる問題です。

iOSのアップデートを止められるか?

iOSのアップデートを止める方法はありません。
iOSのアップデート通知はAppleによって勝手に行われます。

例えば、社内用のiOSアプリで、利用者は社員限定。デバイスは会社配布のiPad。
社内の運用担当者がiOSのアップデートを止めさせたいと思っても、それもできません。
エンドユーザーがタップしてしまえば、アップデートは否応なく行われます。

iOSとXcodeとSwiftのバージョンについて

  • 「古いXcode」と「最新版のiOSデバイス」を繋げて実機デバッグはできません。
  • Swiftは下位互換がなく、最新版のコンパイラでは前バージョンのコードはエラーになります。
  • Xcodeの最新版に格納されているのは、原則、最新版のSwiftコンパイラのみです。(※)

バッド・シナリオの具体例としては、

不用意にテスト用iOSデバイスのOSアップデートをしてしまうと、
「Xcodeをバージョンアップしないと実機デバッグできない!」
と慌てることになりますし、

Xcodeをバージョンアップしてみたら、
「使っているライブラリが最新版のSwiftに未対応だった!」
というケースもありえます。

アップデートは計画的に。

(※) 補足
Xcode 8以降では、メジャーバージョンアップから何回かのマイナーバージョンアップの間は、前バージョンのSwiftコンパイラが選択できる「経過措置」が取られています。

アプリの公開

App Storeでの公開申請

公式ガイドライン(英語)

サルでもできるiOSアプリ公開手順

プロビジョニング・プロファイル

iOSアプリの配布の際、「プロビジョニング・プロファイル」という情報が必要になります。

Apple Developer Programサイト内のMember Centerという場所で管理するのですが、以下のような情報が含まれるようです。

(1)開発者のApple ID
(2)開発者の証明書
(3)アプリのID
(4)デバッガーが利用するデバイス固有のID(UDID) ※デバッグ用限定配信(AdHoc)の場合のみ

このプロビジョニング・プロファイルの扱いが厄介で、配布用パッケージの作成でエラーが発生する等の事象に悩まされます。

  • 基本的な概念がわかりにくい
  • Apple Developer Programのサイトデザインが頻繁に変わるため、ネット検索で手順を調べても、画面が異なっている場合がある
  • まれに、Apple側に起因する、開発者側の手順誤りではないエラーが発生する

宿命だと思って、試行錯誤を覚悟して付き合うしかありません。:sweat_smile:

基本的な概念を頭に入れておくと、トラブルシューティングが早くなります。
iOSアプリのプロビジョニング周りを図にしてみる

もっとも、アプリを配布する段階の話なので、十分学習が進んでから気にすれば良いと思います。

次のステップ

さらに学習を深めたい方向け
[Swift] [Xcode] 脱・初級者のための学習ソース

チームビルディングをする方向け
iOSアプリ開発チームビルディングのTODOリスト