FlutterでiOSアプリを開発して配布するまでの概要
概要
目的としては、以下です。
- ローカル通知
- アプリのテスト配布方法
- バックグラウンド実行
- Webページのスクレイプ
環境
以下の環境にて、VS Codeとコマンドラインによる開発を行います。
> sw_vers
ProductName: macOS
ProductVersion: 12.4
> flutter --version
Flutter 3.0.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision f1875d570e (5 days ago)
Engine • revision e85ea0e79c
Tools • Dart 2.17.6 • DevTools 2.12.2
準備
Flutter
Flutterのインストールは、fvmを使用した構築方法もあると思いますが、本記事ではasdfを使用した環境構築を行います。
asdf plugin-add flutter
asdf install flutter 3.0.5-stable
asdf global flutter 3.0.5-stable
Flutterがインストールできたか、以下のコマンドで確認します。
> flutter doctor
Running "flutter pub get" in flutter_tools... 9.5s
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.0.5, on macOS 12.4 21F79 darwin-x64, locale en-JP)
[✗] Android toolchain - develop for Android devices
✗ Unable to locate Android SDK.
Install Android Studio from: https://developer.android.com/studio/index.html
On first launch it will assist you in installing the Android SDK components.
(or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed
instructions).
If the Android SDK has been installed to a custom location, please use
`flutter config --android-sdk` to update to that location.
[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
[✓] Chrome - develop for the web
[!] Android Studio (not installed)
[✓] VS Code (version 1.69.1)
[✓] Connected device (2 available)
[✓] HTTP Host Availability
! Doctor found issues in 2 categories.
VS Code
settings.jsonのdart.flutterSdkPathに以下のパスを指定します。
"dart.flutterSdkPath": "$HOME/.asdf/installs/flutter/3.0.5-stable",
手順
プロジェクト作成
以下のコマンドにてSwiftとKotlinに対応したプロジェクトを生成します。(今回は、どちらもネイティブで呼び出さないのであまり関係ない)
flutter create -i swift -a kotlin <app_name>
今回は、iOSアプリの動作が確認したいので、Simulator.app
を起動して、以下のコマンドで使用できるデバイス一覧に表さされていることを確認します。
> flutter devices
3 connected devices:
iPhone 13 (mobile) • XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB • ios •
com.apple.CoreSimulator.SimRuntime.iOS-15-5 (simulator)
macOS (desktop) • macos • darwin-x64 • macOS 12.4 21F79 darwin-x64
Chrome (web) • chrome • web-javascript • Google Chrome 103.0.5060.114
以下のコマンドにて、iOS Simulatorで開発appを起動します。
flutter run -d XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB
VS CodeでHot reloadなどを使用したい場合は、VS CodeのRun without Debugging
などから起動した方が良いと思います。
スクレイピング
Webページのスクレイプにはuniversal_htmlを使用します。
flutter pub add universal_html
通知
Notificationには、リモートプッシュとローカルプッシュが大別してありますが、今回は、ローカルプッシュで良いのでflutter_local_notificationsを使用します。
flutter pub add flutter_local_notifications
基本的にflutter_local_notificationsのWebページに書かれている通りに設定すれば問題ないと思います。AppDelegate.m/AppDelegate.swift
に以下を追加します。
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}
以下のタイムゾーンを扱うパッケージいインストールしてから実際に通知を呼び出します。
flutter pub add flutter_native_timezone
データ保存
データを保存するのに、設定値しか保存しないためデータベースよりは、簡易なKey-Value Storeの方が望ましく、flutter_secure_storageを使用します。
flutter pub add flutter_secure_storage
データ
画面間のデータ共有にriverpodを使用します。かなり強力なライブラリなので公式ドキュメントなどを熟読しながら使う必要がありそう。
flutter pub add flutter_riverpod
バックグラウンド処理
定期的に処理をバックグラウンドで実行したいためworkmanagerを使用します。
flutter pub add workmanager
データベース
sqfliteをforkしたsqflite_sqlcipherを使用します。
flutter pub add sqflite_sqlcipher
UUID
device_info_plus
アプリアイコン
flutter_launcher_icons
カメラ
flutter pub add camera
import 'package:camera/camera.dart';
Info.plistに以下を追加
<key>NSCameraUsageDescription</key>
<string>Why do you use the camera API ?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Why do you use the camera API ?</string>
実機デバッグ
iPhoneの実機へ接続して、実行しようししたら以下のメッセージが表示されたので、Xcodeを起動して、以下の手順を実行します。
════════════════════════════════════════════════════════════════════════════════
No valid code signing certificates were found
You can connect to your Apple Developer account by signing in with your Apple ID
in Xcode and create an iOS Development Certificate as well as a Provisioning
Profile for your project by:
1- Open the Flutter project's Xcode target with
open ios/Runner.xcworkspace
2- Select the 'Runner' project in the navigator then the 'Runner' target
in the project settings
3- Make sure a 'Development Team' is selected under Signing & Capabilities > Team.
You may need to:
- Log in with your Apple ID in Xcode first
- Ensure you have a valid unique Bundle ID
- Register your device with your Apple Developer Account
- Let Xcode automatically provision a profile for your app
4- Build or run your project again
5- Trust your newly created Development Certificate on your iOS device
via Settings > General > Device Management > [your new certificate] > Trust
For more information, please visit:
https://developer.apple.com/library/content/documentation/IDEs/Conceptual/
AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html
Or run on an iOS simulator without code signing
════════════════════════════════════════════════════════════════════════════════
配布
アーカイブ作成
flutter build ipa --release --export-options-plist=ExportOptions.plist
最後に
1年前に書いた記事が未公開のままだったので公開しました。情報が古くなっている可能性があります。
Discussion