iOSアプリ開発から公開までの流れ（Pingを作ってみる）

2015年頃から「Pythonista3 (Python 統合開発環境の iOS アプリ)」でアプリを作成して遊んできました。
しかし、ネイティブな iOS アプリ (や Android アプリ) も作ってみたい！そして世界に向けて発信したい！
という欲求が急に沸き立ち、MacBook を購入しました。
まずはリハビリを兼ねて Ping を作成します。

これは、Xcode を使用したアプリの作成から公開までの足跡と備忘録になります。

## 目次

1. [Xcodeプロジェクトの作成](https://qiita.com/manabapp/private/596d1acd45ece0499d73)
1. [iOSアプリのビルドと起動確認](https://qiita.com/manabapp/private/234fb461821f56c36a69)
1. [GitHubリポジトリの作成](https://qiita.com/manabapp/private/d017c85762ed232490b3)
1. [Gitリポジトリへのコミットとプッシュ](https://qiita.com/manabapp/private/01b3b6538d3a8b37f3cb)
1. [SF Symbolsのインストールと使用方法](https://qiita.com/manabapp/private/921aee167359e3b29410)
1. [アプリアイコンの作成と設定](https://qiita.com/manabapp/private/7147f4976ea63d93a335)
1. [スプラッシュ画面の作成と設定](https://qiita.com/manabapp/items/1c6b8259ed9f5b8db4ad)&nbsp;&nbsp;&nbsp;&nbsp;(全体公開)
1. [アプリ利用規約の作成と表示制御](https://qiita.com/manabapp/private/0f996daa198e8a8742a7)
1. [マルチ言語化の対応](https://qiita.com/manabapp/private/685087bbffe84be276a5)
1. [SwiftによるICMPソケット通信の実装と考察](https://qiita.com/manabapp/items/a07d979c2f0d48ce5e54)&nbsp;&nbsp;&nbsp;&nbsp;(全体公開)
1. [SwiftによるPOSIX Socketラッパーの設計と汎用化](https://qiita.com/manabapp/items/4ee722b1017f69aa9547)&nbsp;&nbsp;&nbsp;&nbsp;(全体公開)
1. [iOS端末ネットワークインターフェースのアドレス取得の実装と考察](https://qiita.com/manabapp/items/10b3b9b041759f3fac17)&nbsp;&nbsp;&nbsp;&nbsp;(全体公開)
1. [ジャイロスコープによる傾き検知の実装](https://qiita.com/manabapp/private/074ad8f0acb81a7c5269)
1. [Apple Developer Program への登録](https://qiita.com/manabapp/private/46f96a4942b68165c677)
1. [プライバシーポリシーの作成とWebサイトの準備](https://qiita.com/manabapp/private/08cb95f128a6901f249a)
1. [アプリの申請と公開](https://qiita.com/manabapp/private/53f535fee47e5c0e8c4a)

補足： Qiita で既出の情報は限定共有記事にしてあります。


## 前提条件

以下に示すものを用意しましょう。

+ Mac (macOS は、Catalina もしくは Big Sur の最新バージョン)
+ Xcode (最新バージョン) 
+ iPhone（iOS は最新バージョンを推奨)
+ Apple ID（開発向けサブアカウントの別途作成を推奨）
+ GitHub アカウント
+ クレジットカード[^1]
+ 11,800円(税別) 2020/12/16時点

私の iPhone は 11 の無印。私の Mac はコレ。
![前提条件.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844861/46fdf9ed-c0af-d241-40df-b0f083a722a9.jpeg)

[^1]: 私はクレジットカード持ってないので、~~果たしてアプリを公開できるのかとても心配。この記事完結しないかも~~。 (2020/12/16 追記) Apple に問い合わせてクレジットカード必須だと判明したので、なんとか入手。


## 要件定義

「誰向け」の「どんな特徴」のアプリにするのか。オンリーワンなアプリなのか。類似のアプリ達とどこが違うのか。できるだけ事前に決めましょう。

私の Ping アプリは、こんな感じで差異化を図ります。

> 低水準 API で通信・処理内容を可視化し、利用者 (エンジニア) の Ping 理解度向上をサポート
> 結局ネットワークで問題が発生したら、一番活躍するのが Ping。仕組みが理解されればもっと活躍するはず！？

アプリ要件は以下のとおり。

+ 搭載機能は、Ping と Traceroute だけのシンプルイズベスト
+ 低水準 POSIX Socket API とシステムコールトレースによる処理内容の可視化
+ ICMP / UDP 両プロトコルに対応、マルチキャスト対応、その他主要なオプション機能を提供
+ ~~モバイルらしく Bluetooth にも対応~~ (Bluetooth 通信にソケットを使用している訳ではないので機能搭載は断念)
+ 「Swift」言語と「SwiftUI」で最新トレンドをキャッチアップ [^2]
+ マルチ言語 (英語と日本語) による画面表示で海外エンジニアにも積極アピール
+ iOS 14.0 以降
+ 無料 & 広告なし

[^2]: 言語 (Swift or Objective-C) と UI (SwiftUI or Storyboard) は後戻りできない重要な選択になりそうです。この記事では最新の組み合わせでいきます。

## ソースコード
https://github.com/manabapp/SocPing/tree/main/SocPing/

## さいごに
2021年1月14日に無事リリースしてから約1ヶ月経ちました。

Pythonista3 での UI の書き方と SwiftUI は共通点が多く、インターネットの情報も参考にしながら特に問題なく作り込みができましたことはよかったです。しかし、Swift の基本的なコーディング方法がとても難しかったです。おそらく、クラス設計など改善点は多いと思っています。

気になるダウンロード数はというと、2月16日現在で 33 本です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/844861/c9cee270-6ff1-09e3-96bc-c091831f9cad.jpeg" width=300>

私の1本を除くと、日本はゼロです。せっかく日本語にローカライズしたのに意味なかったです(T T)
ダウンロード数の伸び悩みについて要因を自己分析してみると、

1) アプリに魅力がない
2) アピール不足（App Store 登録情報の訴求力不足、Qiita のような技術サイトへの発信不足、など）
3) App Store で「ping」で検索してもヒットしない

というところだと思っています。今後への課題とします。

ということで、初めての Qiita への投稿はこの辺で終わりとします。