Multi-Environment for Firebase Crashlytics

Sarinthon Mangkorn-ngam
2 min readJun 25, 2020

--

จาก Blog ก่อนหน้านี้ที่ได้เขียนไป (Firebase Crashlytics) นั้น ภายใน Project มี Target แค่อันเดียว แต่พอเราใช้งานจริง ๆ แล้วเรามี Environment มากกว่านี้ ทั้ง Dev, Test, UAT และ Prod และบางครั้ง iOS Dev ก็จะมีการ Sign cert ต่างกันเช่นใช้ Enterprise Program ร่วมกับ Individual Program เป็นต้น

ดังนั้นการที่มี Bundle ID ที่ต่างกันและ Add เข้าไปที่ Firebase project ของเราจะเห็นได้ว่ามี “GoogleService-Info.plist” นั้นมีบางส่วนที่ต่างกันเช่น CLIENT_ID, GOOGLE_APP_ID, BUNDLE_ID เป็นต้น ซึ่งทำให้เราต้องมาเปลี่ยนข้อมูลเหล่านี้ก่อนจะ Build และ Run target ที่ต้องการ แค่ฟังก็รู้สึกเหนื่อยแล้ว มาลองดูวิธีที่ดีกว่ากันเลย

ขั้นแรก

ให้ Download “GoogleService-Info.plist” ทั้งหมดเข้ามาในโปรเจคและแยกประเภทให้ชัดเจนดังรูป

**ที่สำคัญเลือก Target ตอน import “GoogleService-Info.plist” ให้เหมาะสม

ขั้นที่ 2

เพิ่มโค้ดบนไฟล์ AppDelegate.swift ในส่วน “didFinishLaunchingWithOptions”

FirebaseApp.configure()

ขั้นสุดท้าย

ใน Target ของเราให้เข้าไปในส่วน Build Phases และเพิ่ม Run Script Phase เข้าไปดังรูป

“${PODS_ROOT}/FirebaseCrashlytics/run”${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

จากนั้นทดลอง Build ดูเวลามี Error แบบรูปด้านล่างไหม

ถ้ามีแสดงว่า Run script ของเราหาไฟล์ “GoogleService-Info.plist” ไม่เจอ ให้ลองทำที่ขั้นตอนแรกใหม่อีกครั้ง

เมื่อผ่านตอน Build time แล้วให้ทดลอง Run และ Forcing a bug เพื่อทดสอบส่ง Crash report จากเครื่องดู

ในกรณีที่เปลี่ยนชื่อไฟล์ “GoogleService-Info.plist” เป็นชื่ออื่นเช่น ต่อให้ Enterprise, Individual เป็นต้นวิธีการทำ Firebase config จะเปลี่ยนไปดังด้านล่าง

// Load a named file.
let filePath = Bundle.main.path(forResource: "MyGoogleService", ofType: "plist")
guard let fileopts = FirebaseOptions(contentsOfFile: filePath!)
else { assert(false, "Couldn't load config file") }
FirebaseApp.configure(options: fileopts)

และที่สำคัญ Run script ออกเราจะใช้ไม่ได้เนื่องจากมันจะเป็น Load file “GoogleService-Info.plist” ตัวนี้ เราจะเปลี่ยน Run script เป็น

“${PODS_ROOT}/FirebaseCrashlytics/upload-symbols” -gsp GoogleService-Info-Enterprise.plist -p ios “${DWARF_DSYM_FOLDER_PATH}/”

run หรือ upload-symbols เป็น exec ไฟล์ที่มาพร้อมกับ FirebaseCrashlytics ที่เรา Install มาดังรูป

มาสามารถ Manual upload หรือใช้ผ่าน Run script after build success ก็ได้ครับ

--

--

Responses (1)