-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Expand file tree
/
Copy pathsetup.sh
More file actions
190 lines (170 loc) · 5.22 KB
/
Copy pathsetup.sh
File metadata and controls
190 lines (170 loc) · 5.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/bash
#
# Set up the Omi Mobile Project(iOS/Android).
#
# Prerequisites (stable versions, use these or higher):
#
# Common for all developers:
# - Flutter SDK (v3.41.9)
# - Opus Codec: https://opus-codec.org
#
# For iOS Developers:
# - Xcode (v16.4)
# - CocoaPods (v1.16.2)
#
# For Android Developers:
# - Android Studio (Iguana | 2024.3)
# - Android SDK Platform (API 35)
# - JDK (v21)
# - Gradle (v8.10)
# - NDK (28.2.13676358)
#
# Usages:
# - $bash setup.sh ios
# - $bash setup.sh android
set -euo pipefail
echo "👋 Yo folks! Welcome to the OMI Mobile Project - We're hiring! Join us on Discord: http://discord.omi.me"
echo "Prerequisites (stable versions, use these or higher):"
echo ""
echo "Common for all developers:"
echo "- Flutter SDK (v3.41.9)"
echo "- Opus Codec: https://opus-codec.org"
echo ""
echo "For iOS Developers:"
echo "- Xcode (v16.4)"
echo "- CocoaPods (v1.16.2)"
echo ""
echo "For Android Developers:"
echo "- Android Studio (Iguana | 2024.3)"
echo "- Android SDK Platform (API 36)"
echo "- JDK (v21)"
echo "- Gradle (v8.10)"
echo "- NDK (28.2.13676358)"
echo ""
echo "Usages:"
echo "- bash setup.sh ios"
echo "- bash setup.sh android"
echo ""
API_BASE_URL=https://api.omiapi.com/
######################################
# Generate device suffix from hostname
######################################
function generate_device_suffix() {
# Use hostname or a hash of it as suffix
HOSTNAME=$(hostname -s | tr '[:upper:]' '[:lower:]' | tr -cd '[:alnum:]')
echo "${HOSTNAME}"
}
######################################
# Generate custom configs for iOS
######################################
function generate_ios_custom_config() {
bash scripts/generate_ios_custom_config.sh ios/Config/Dev/GoogleService-Info.plist ios/Flutter \
# Custom bundle identifier
SUFFIX=$(generate_device_suffix)
CUSTOM_BUNDLE="com.friend-app-with-wearable.ios12-${SUFFIX}"
echo APP_BUNDLE_IDENTIFIER=${CUSTOM_BUNDLE} >> "ios/Flutter/Custom.xcconfig"
}
######################################
# Setup Firebase with prebuilt configs
######################################
function setup_firebase() {
mkdir -p android/app/src/dev/ ios/Config/Dev/ ios/Runner/
cp setup/prebuilt/firebase_options.dart lib/firebase_options_dev.dart
cp setup/prebuilt/google-services.json android/app/src/dev/
cp setup/prebuilt/GoogleService-Info.plist ios/Config/Dev/
cp setup/prebuilt/GoogleService-Info.plist ios/Runner/
# Warn: Mocking, should remove
mkdir -p android/app/src/prod/ ios/Config/Prod/
cp setup/prebuilt/firebase_options.dart lib/firebase_options_prod.dart
cp setup/prebuilt/google-services.json android/app/src/prod/
cp setup/prebuilt/GoogleService-Info.plist ios/Config/Prod/
}
##########################################
# Setup Firebase with Service Account Json
##########################################
function setup_firebase_with_service_account() {
dart pub global activate flutterfire_cli
flutterfire config \
--platforms="android,ios,web" \
--out=lib/firebase_options_dev.dart \
--ios-bundle-id=com.friend-app-with-wearable.ios12.development \
--android-app-id=com.friend.ios.dev \
--android-out=android/app/src/dev/ \
--ios-out=ios/Config/Dev/ \
--service-account="$FIREBASE_SERVICE_ACCOUNT_KEY" \
--project="based-hardware-dev" \
--ios-target="Runner" \
--yes
flutterfire config \
--platforms="android,ios,web" \
--out=lib/firebase_options_prod.dart \
--ios-bundle-id=com.friend-app-with-wearable.ios12 \
--android-app-id=com.friend.ios.dev \
--android-out=android/app/src/prod/ \
--ios-out=ios/Config/Prod/ \
--service-account="$FIREBASE_SERVICE_ACCOUNT_KEY" \
--project="based-hardware-dev" \
--ios-target="Runner" \
--yes
}
######################################
# Setup provisioning profile
######################################
function setup_provisioning_profile() {
# Only install fastlane if it doesn't exist
if ! command -v fastlane &> /dev/null; then
echo "Installing fastlane..."
brew install fastlane
fi
MATCH_PASSWORD=omi fastlane match development --readonly \
--app_identifier com.friend-app-with-wearable.ios12.development \
--git_url "git@github.com:BasedHardware/omi-community-certs.git"
}
#################
# Set up App .env
#################
function setup_app_env() {
echo API_BASE_URL=$API_BASE_URL > .dev.env
echo USE_WEB_AUTH=true >> .dev.env
echo USE_AUTH_CUSTOM_TOKEN=true >> .dev.env
}
# #######################
# Set up Android Keystore
# #######################
function setup_keystore_android() {
cp setup/prebuilt/key.properties android/
}
# #####
# Build
# #####
function run_build_android() {
flutter pub get \
&& dart run build_runner build \
&& flutter run --flavor dev
}
# #########
# Build iOS
# #########
function run_build_ios() {
flutter pub get \
&& pushd ios && pod install --repo-update && popd \
&& dart run build_runner build \
&& flutter run --flavor dev
}
case "${1}" in
ios)
setup_firebase \
&& generate_ios_custom_config \
&& setup_app_env \
&& run_build_ios
;;
android)
setup_keystore_android \
&& setup_firebase \
&& setup_app_env \
&& run_build_android
;;
*)
error "Unexpected platform '${1}'"
;;
esac