初めてのiOSアプリ開発を振り返る

# はじめに

本格的にSwiftの学習を開始してから、オリジナルアプリ開発を行い、App Storeに公開するところまで実施することができました。
一区切りついたため、今回やってきたことの振り返りを行いました。

# 背景
現在の私の業務は、通信ネットワークやサービスサーバーの保守・運用です。
所謂ネットワークエンジニアであり、プログラミングを行う業務はやっていないためアプリ開発自体は未経験です。
前々から今の業務とは、別の方向で新しいスキルを身につけたいと考えておりました。
アプリ開発は興味のあった分野であり、iPhoneやiPadは普段から使用していることから、iOSアプリ開発に挑戦してみようと思ったのがきっかけです。

# 目標

アプリ開発に挑戦するに当たって下記の目標を立てました。

・オリジナルアプリを開発して公開する
・副業案件を獲得する

どうせやるなら、やったことを結果という形にしたいと思ったからです。

# アプリ紹介

SSHを使用してリモートアクセスを行うシンプルなSSHクライアントアプリです。

[App Store](https://apps.apple.com/us/app/insterm/id6742595334)
[GitHub](https://github.com/YuMori1031/Insterm)

<img width="400" alt="iPhone 8 Plus.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3092073/fe2408e8-d3bb-a708-766c-de37efe6a30d.png">

# 開発理由

・自分が普段利用するものがいい（作って終わりではなく、継続して保守をする理由になるため）
・前述の通り、ネットワークエンジニアであるため、SSHによるリモートアクセスは頻繁に利用機会がある

上記の理由から、SSHクライアントアプリを開発しようと考えました。

# 学習内容

### 学習時間

本業の状況や家庭環境に多少左右されますが、１日おおよそ２時間程度を学習時間に充てて、ほぼ毎日継続してました。

### 独学で学習開始

まずはやってみようと考えて独学で開始しました。
調べていくと開発方法にUIKitとSwiftUIなるものがあるとのこと。
できるだけ最新のものに触れた方が良いだろうと考えた結果、SwiftUIで学習を進めることにしました。
※後に実務ではUIKitによる開発が主流であることを知る。

使用した教材は下記です。
・[SwiftUI Masterclass 2022 – iOS App Development & Swift](https://www.udemy.com/course/swiftui-masterclass-course-ios-development-with-swift/)

学習期間としては、２０２２年４月から６月までの約２ヶ月間でした。

### アウトプットで滞る

学習を終えて、オリジナルアプリ開発に着手しようとしましたが、何から手をつけていいか、そもそも何をどうすれば達成できるのかがわからないという状態になりました。
色々調べるも、結局この時点では進みませんでした。
本業の方で資格取得のための学習も並行していたため、一旦はそちらに注力することにして、オリジナルアプリ開発については中断することにしました。

### 独学をやめる

資格試験を終えて、再度オリジナルアプリ開発を再開しました。
ただ、独学でやるには難しいと思い、有識者の方へ相談するのが良いのではないかと考えて[MENTA](https://menta.work/plan/4521)を契約することにしました。

### 学習再開

２０２２年１０月より学習再開。

メンタリングの中で、実務ではUIKitによる開発が主流であると教えて頂いたため、再度基礎から学習をやり直しました。

使用した教材は下記です。
・[iOS & Swift - The Complete iOS App Development Bootcamp](https://www.udemy.com/course/ios-13-app-development-bootcamp/)

この教材で、Swiftだけでなく、Git及びGitHubに関することを学習できました。

基礎学習については、２０２２年１１月末完了。
その後、オリジナルアプリ開発を進めることになりました。

# 開発内容

### 機能について

今回は初めてということもあり、機能を限定したシンプルなものにしようと思いました。

・接続先情報を入力する画面とターミナル画面の２画面構成
・認証方式はパスワード認証のみ

[Figma](https://www.figma.com/ja/)でワイヤーフレームを作りました。

![ターミナルApp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3092073/d49c1f9e-9232-df81-664e-cdb2f6cb4258.png)

### 使用したライブラリ

SwiftTerm
-
https://github.com/migueldeicaza/SwiftTerm

ターミナルエミュレーションを行うためのライブラリ。


NMSSH
-
https://github.com/NMSSH/NMSSH

SSH通信を行うためのライブラリ。


### 苦労した点

・SwiftTermのサンプルコードが動かない
単純に宛先情報を変更すれば動くと思いきや動かず。（SSHライブラリの問題？）

・NMSSHのドキュメントがない
GitHubのREADMEにドキュメントのリンクはあるものの表示されない。（リンク先のドメイン停止中？）

これらの問題に関しては、GitHubに同じライブラリを使用しているリポジトリがありましたので、そちらにあるソースコードを確認することで実装方法を確認できました。

参考にしたリポジトリは下記です。

https://github.com/TJohn2017/Laputa

https://github.com/dnpp73/Terminal


# App Storeへの公開

下記を参考にApp Atoreへ公開を行いました。
・[（2022年版）iOSアプリをAppStoreで公開する手順まとめ](https://zenn.dev/moutend/articles/feebf0120dce6e6426fa)

Appleのアプリ審査は厳しいと聞いていたのですが、幸いにも一度もリジェクトされず、２０２３年１月に無事に公開できました。

# 今後について

### アプリのブラッシュアップ

今回開発したアプリの改良を継続していきたいと思います。

まずは、ターミナル画面のフォントサイズを変更できるようにしたいと思っています。
※iPad実機で使用した時にフォントサイズが小さいと感じたので・・・。

将来的には下記内容の改良を行っていきたいと考えています。
・宛先情報をDBに保存
・宛先情報を複数の端末で同期
・認証方式に公開鍵認証方式を追加
・公開鍵認証用の鍵作成機能
・鍵交換のためにSFTPでファイル送受信する機能

また、せっかくSwiftUIの学習をしていたので、将来的にUI部分をSwiftUIに置き換えることも検討しても良いかもしれません。

### 副業案件獲得のための実績作り

[MENTA](https://menta.work/plan/4521)のプランにある実務体験を行い、経験を積みたいと考えています。
その後、サポートを頂きながら、実際の副業案件獲得に挑戦し、最終的には独力で案件受注できるように進めていければと思います。

# 終わりに
現在副業でiOSアプリ開発の案件を募集しています。
[Twitter DM](https://twitter.com/YuMori46493869)でご依頼をお待ちしております。