初めてiOSアプリをリリースした話

## はじめに  
こんにちは！初めましてsoraと申します！　　
カレンダーアプリをリリースしたのでこちらにて紹介させてください！  
ちなみに私は現在、22年卒の大学生でSwift歴は2020年9月~です。

  
## リリースしたアプリの紹介  
今回リリースしたアプリは「Re:スケ」というカレンダーアプリです。このアプリは大学のゼミの卒業制作として3人でチームを組み作ったアプリです。
カレンダーアプリを作った理由は、みんなが使えるアプリを作りたいってなったのと今までカレンダーを扱ったアプリを作ったことがなかったので勉強したいからという割とざっくりとした理由でカレンダーアプリを作ることにしました。
AppStore: https://apps.apple.com/jp/app/re-%E3%82%B9%E3%82%B1/id1607735456  
[ソースコード](https://github.com/sora5042/CalendarApp)はこちらです。
よろしければインストールして試してみて欲しいです！  
  
## アプリ概要  
<img width="250" src="https://user-images.githubusercontent.com/65600700/158942775-1a4e159c-323b-4d31-9a29-8355cad23928.png">  <img width="250" src="https://user-images.githubusercontent.com/65600700/158943108-5af9334a-3aa3-4e8e-b9e5-eaed0f608168.png"> <img width="250" src="https://user-images.githubusercontent.com/65600700/158943287-491c4aab-0a64-4274-ac26-efb2371d78ba.png">  
  
このアプリはカレンダーでスケジュール管理するスマホアプリです。  
  
主な機能としては  
- 日付ごとのイベント管理機能(CRUD)  

- リマインダープッシュ通知  

- カスタマイズ可能なカレンダー表示(スライド方向の切り替え設定、曜日順、土日祝のみと平日のみの表示機能)  
  
- 六曜の表示  
  
- Widget
  
- Googleカレンダーアプリと同期、iOS標準カレンダーアプリと同期    
    
となっております。 
　　
## 開発環境  
- Swift5.5.2  
- Xcode13.2.1   
  
## 使用ライブラリ  
- [FSCalendar](https://github.com/WenchaoD/FSCalendar)  
カレンダーの実装  

- [RealmSwift](https://github.com/realm/realm-cocoa)  
日付ごとのイベント管理  
  
- [CalculateCalendarLogic](https://github.com/fumiyasac/handMadeCalendarAdvance)  
祝日判定  
  
- [TextFieldEffects](https://github.com/raulriera/TextFieldEffects)  
TextFieldのUI  
  
- [IQKeyboardManager](https://github.com/hackiftekhar/IQKeyboardManager)  
キーボード表示時の画面のスライド  
  
- [PKHUD](https://github.com/pkluz/PKHUD)  
通信時のローディングインジケーター  
  
- [SwiftLint](https://github.com/realm/SwiftLint)  
ソースコードの品質管理  
  
- [AppAuth](https://github.com/openid/AppAuth-iOS)  
OAuth2.0およびOpenIDConnectプロバイダーと通信するためのクライアントSDK  
  
- [GTMAppAuth](https://github.com/google/GTMAppAuth)  
AppAuthでリクエストを認証するためGTMFetcherAuthorizationProtocolの実装を提供する  
  
- [GoogleAPIClientForREST/Calendar](https://github.com/google/google-api-objectivec-client-for-rest)  
Googleの様々なAPI へのアクセス・データの取得などを簡単にできるようにしてくれるもの(今回はGoogleカレンダー)  
  
- [Google-Mobile-Ads-SDK](https://github.com/googleads/googleads-mobile-ios-examples)  
Googleモバイル広告の最新世代で、洗練された広告フォーマットと、モバイル広告ネットワークや広告ソリューションにアクセスするため  
  
- [LicensePlist](https://github.com/mono0926/LicensePlist#installation)  
CocoaPods、SwiftPMなどで管理しているライブラリのライセンス表示を自動的に生成するツール 
    
- [Firebase](https://github.com/firebase/firebase-ios-sdk)  
Firebaseのアナリティクスでユーザー解析をするため  
  
## 特徴 
- カスタマイズ可能なカレンダー表示  
これは土日祝に予定を追加する際、その月の土日祝や平日がくっきり瞬時に分かります。普段土日祝の休日にしか予定を入れない人や学生には便利な機能ではないかと思います。  
  
<img width="250" src="https://user-images.githubusercontent.com/65600700/159205979-cca8c54f-39c2-4903-8c6b-1f8f9f3e39a7.jpg">  <img width="250" src="https://user-images.githubusercontent.com/65600700/159205999-9704475c-abb1-4c85-a240-405900d40cbe.jpg">  
　　
## 作ってみた感想  
今まで何個かアプリを個人で作っていましたが、今回初めてカレンダーを扱うアプリを作りました。その中でデータベースのRealmも初めて実装しました。ですので、最初はその勉強から始まりましたが、無事に完成させることができて良かったです。 
苦労した点は、Realmはこれまで利用していたSQLiteやFirebaseと比べて設計思想や使い方が少し違うので、理解して実装しなければクラッシュがよく起こるところとシンプルなアプリですので既存アプリとどう差別化するかについては苦労しました。 

## アプリをリリースして良かったこと  
- ユーザーから意見やアイデアをもらえる 
  
やはりなんといってもユーザーからの声が一番嬉しいですね。このアプリはまだまだ知名度が低いですが、周りの友人から「便利やな」や「もっとここをこうして欲しい」とか「今までカレンダーアプリ使ったことないけどこれを機に使ってみる」などのポジティブなフィードバックをもらった時は「これがアプリ開発か~」と嬉しかったことを覚えています。  
もし、アプリ開発の勉強しているけどリリースしたことがない人はなにかしらのアプリを作ってリリースすることをおすすめします。  
私はもっと早くにアプリを作ってリリースしていればよかったと少し後悔しています。（笑）  
  
## おわりに  
既存のカレンダーアプリに比べて劣るとこはたくさんあると思いますが、大学のゼミの卒業制作としてしっかり完成させてリリースできて良かったです。技術的にも、興味があったものや実装したことがないものを中心に採用できたので自己成長にも繋がりました。  
今後はSwiftUIも勉強し、どんどんアプリを作っていきたいと思っています。  
あと、Flutterにも興味あるので余裕があれば勉強してみようかなと思っています。