μλ νμΈμ!
iOS μ±μ κ°λ°μ μλ£ν ν, μ± μ€ν μ΄μ λ°μΉνκΈ° μ μ Debug / Release νκ²½μ ꡬλΆν΄μ κ°λ°μλ²μ μ€μλ² κ°κ° ν μ€νΈ ν λ°°ν¬λ₯Ό νμ΅λλ€. API μλ²μ Firebase (Auth, Storage, Crashlytics) λ₯Ό μ°λνκΈ° λλ¬Έμ, μ’ λ 볡μ‘ν΄μ κ³ μνλ κΈ°μ΅μ΄ λλ€μ π
- Debug νκ²½ (Dev) - κ°λ°μ© μλ², DB, Firebase νλ‘μ νΈ
- Release νκ²½ (Production) - μ€μ μλΉμ€μ© μλ², DB, Firebase νλ‘μ νΈ
μλ λ΄μ©λ€μ λ°λΌ Xcode μμ κ°λ° νκ²½μ ꡬλΆνμ΅λλ€.
1. κ°λ° μλ², μ€ μλ² URL ꡬλΆνκΈ°
2. λ κ°μ Firebase νλ‘μ νΈλ₯Ό DEBUG/RELASE μ λ°λΌ ꡬλΆνκΈ°
3. Firebase νλ‘μ νΈ URL ꡬλΆνκΈ°
4. Firebase Crashlytics μΆκ°νκΈ°
1. κ°λ° μλ², μ€ μλ² URL ꡬλΆνκΈ°
API μλ²μ ν΅μ νκΈ° μν΄ URL κ΄λ ¨λ μ 보λ₯Ό μ μ₯ν ꡬ쑰체μ μμλ‘ baseURL κ°μ μ€μ ν΄μ£Όκ³ μλλ°μ. ν΄λΉ κ°μ DEBUG νκ²½, RELEASE νκ²½μ λ°λΌ λ€λ₯Έ κ°μ΄ μ€μ λλλ‘ νμ΅λλ€.
#if DEBUG
static let baseURL = "κ°λ°μ© API μλ² URL"
#else
static let baseURL = "μ€μλΉμ€ API μλ² URL"
#endif
2. λ κ°μ Firebase νλ‘μ νΈλ₯Ό DEBUG/RELASE μ λ°λΌ ꡬλΆνκΈ°
API μλ²μ λλΆμ΄ Firebase κΈ°λ₯μ μ¬μ©νκ³ μλλ°μ. Firebase νλ‘μ νΈλ κ°λ°μ© / μ€μλΉμ€μ© λ κ°λ‘ ꡬλΆμ ν΄μ κ°λ°νμ΅λλ€.
Firebase νλ‘μ νΈλ₯Ό μ¬μ©νκΈ° μν΄μλ κ΅¬μ± νμΌμΈ GoogleService-Info.plist λ₯Ό νλ‘μ νΈ λ΄μ μ μ₯νκ³ μμ΄μΌν©λλ€. λ κ°μ νλ‘μ νΈλ₯Ό μ¬μ©νκΈ° μν΄μλ κ° νλ‘μ νΈλ§λ€ κ΅¬μ± νμΌμ κ°μ§κ³ μμ΄μΌνκ³ , μ±μ΄ λΉλλ λ νκ²½μ λ§λ νμΌμ μ°Έμ‘°νλλ‘ νλ©΄ λ©λλ€.
Firebase λ¬Έμ [μ¬λ¬ νλ‘μ νΈ κ΅¬μ±]
κ΅¬μ± νμΌμ iOSμ κ²½μ° GoogleService-Info.plist, Androidμ κ²½μ° google-services.jsonμ λλ€. μ΄λ¬ν νμΌμ μ΅μ κ°μ²΄(FIROption λλ FirebaseOptions)λ‘ μ½μΌλ©΄ Firebase μ ν리μΌμ΄μ κ°μ²΄(FIRApp λλ FirebaseApp)κ° μ΄ μ΅μ κ°μ²΄λ₯Ό μ°Έμ‘°ν©λλ€.
Firebase κ΅¬μ± νμΌμ μ μ₯ν λμλ νμΌλͺ μ λ€λ₯΄κ² λ§λ€κ³ ꡬλΆνκ±°λ, νμΌλͺ μ κ°κ² νκ³ ν΄λλ‘ κ΅¬λΆν΄λ λ©λλ€. μ λ νμμ λ°©λ²μ ννμ΄μ!
μ±μ΄ λΉλλ λ νκ²½μ λ§λ νμΌμ μ°Έμ‘°νλλ‘ Build Phases μμ μ€ν¬λ¦½νΈλ₯Ό μΆκ°ν΄μ€λλ€. μλ μ€ν¬λ¦½νΈλ Debug / Release νκ²½μ λ°λΌ Firebase κ΅¬μ± νμΌμ νλ‘μ νΈμ λ£¨νΈ ν΄λμ 볡μ¬λ₯Ό μνν©λλ€!
# Type a script or drag a script file from your workspace to insert its path.
case "${CONFIGURATION}" in
"Debug" )
cp -r "$SRCROOT/Zerobin/FirebaseConfig/Dev/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
"Release" )
cp -r "$SRCROOT/Zerobin/FirebaseConfig/Main/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
*)
;;
esac
3. Firebase νλ‘μ νΈ URL ꡬλΆνκΈ°
νμ¬ μ±μμλ Firebase Storage λ₯Ό ν΅ν΄ μ΄λ―Έμ§λ₯Ό κ΄λ¦¬νκ³ μμ΅λλ€. μΈλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄μ©νκΈ° μν΄ Firebase URL μ ν΅ν΄ μ΄λ―Έμ§λ₯Ό μ κ·Όνλ κ²½μ°λ μμ΄, URL λ λκ°μ νλ‘μ νΈλ₯Ό ꡬλΆν΄μ€μΌ νμ΄μ.
Firebase Storage μ μ μ₯λ νμΌμ URL μ μλμ²λΌ ꡬλΆλΌμ.
"https://firebasestorage.googleapis.com/v0/b/\(projectID).appspot.com/o/\(fileName)?alt=media"
1λ²μμ κ°λ°μλ², μ€μλ²μ URL μ ꡬλΆνλ κ²κ³Ό λΉμ·νκ² μ½λλ₯Ό μμ±ν΄μ£Όλ©΄ λ©λλ€! baseURL κ³Ό query μ¬μ΄μ νμΌ μ΄λ¦μ μΆκ°νκΈ° μν΄μ κ°κ° μμμ ν λΉνμ΅λλ€.
#if DEBUG
static let projectId = "κ°λ°νλ‘μ νΈID"
#else
static let projectId = "μ€μλΉμ€νλ‘μ νΈID"
#endif
static let baseURL = "https://firebasestorage.googleapis.com/v0/b/\(projectId).appspot.com/o/"
static let query = "?alt=media"
4. Firebase Crashlytics μΆκ°νκΈ°
iOS μ±μ ν¬λμ¬(λΉμ μ μ’ λ£)λ₯Ό μμ§νκΈ° μν΄μ Firebase Crashlytics κΈ°λ₯μ μ°λνμ΅λλ€. ν΄λΉ κΈ°λ₯μ Debug λͺ¨λμμλ μ΄μ©λμ§ μκ³ , Release λͺ¨λμμλ§ μ΄μ©μ΄ κ°λ₯ν©λλ€. μμνλ λ°©λ²μ λν΄μλ Firebase λ¬Έμλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ!
Build Phase μ μλ μ€ν¬λ¦½νΈλ₯Ό μΆκ°ν΄μ€λλ€. 2λ²μμ μμ±ν μ€ν¬λ¦½νΈκ° μ€νλ μ΄νμ μ€νλ μ μλλ‘ μμλ₯Ό μ€μ ν΄μ£ΌμΈμ.
# Type a script or drag a script file from your workspace to insert its path.
if [ "${CONFIGURATION}" != "Debug" ]; then
"${PODS_ROOT}/FirebaseCrashlytics/run"
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist -p ios ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
fi
μ΄ν, μ±μ κ°μ μ’ λ£νλ μ½λλ₯Ό μΆκ°ν΄μ Crashlytics κ° μ μλλλμ§ νμΈνμλ©΄ λ©λλ€. (μ½λλ κΌ μ κ±°ν΄μ£ΌμΈμ!!)
π£ μ°Έκ³ λ§ν¬
2κ° μ΄μμ κ°λ° νκ²½μ ꡬλΆνλ λ°©λ²
Firebase Crashlytics λ₯Ό μ΄μ©ν΄μ νλ‘μ νΈ κ΅¬λΆνλ λ°©λ²
- [LET me lOg] Multiple Firebase Configuration μ€μ νκΈ°
- [Hanulyun] Google-Service-Info.plist νμΌ μ¬λ¬κ° μ¬μ©νκΈ°