Portfolio

nuPhoto

nuPhoto is the largest online photo service app in Taiwan. It enables users to create personalized photo gifts for themself or their friends.

 I’m in charge of the user experience and development of this app.

Language: Swift

Architecture: MVC

ShoplinePOS(formerly WAPOS)

WAPOS was a fast-growing startup that focused on providing a retail POS (Point of Sale) app solution for Small and medium-sized businesses.  It was acquired by Shopline in Mar 2019. 

I designed and implemented an iPad retail POS (Point of Sale) app from the ground up, supporting daily business operations of 600 retail merchants.

Language: Swift and Objective-C

Architecture: VIPER, RxSwift, RxFeedback

Database: Couchbase

Logging: CocoaLumberjack + Bugfender

Hardware: Star mPOP, Socket Mobile 7ci barcode scanner, Brother QL-810W

Checkout

Invoices

Inventory Count

Purchase Order

Stock Transfer

Customer

Continue Reading Portfolio

Migrate from Fabric Crashlytics SDK to Firebase Crashlytics SDK

  • Post author:
  • Post category:iOS
  • Post comments:0 Comments

Recently we migrated our crash report SDK from Fabric Crashlytics to Firebase Crashlytics.

Here’s the note:
I assume that the app has been migrated to Firebase, and you can see crashes on dashboard.

Follow the steps in the document
https://firebase.google.com/docs/crashlytics/get-started-new-sdk?platform=ios

Install new SDK


Replace

pod 'Fabric'
pod 'Crashlytics'

with

pod 'Firebase/Crashlytics'

Configure for different env

Download all GoogleService-Info.plist files form your different projects and drag and drop into the Xcode project.

Remember rename them according to env or something you can recognize.
Ex: GoogleService-Info-Staging.plist, GoogleService-Info-Production.plist

Configure multiple environment in AppDelegate

#ifdef STAGING
    filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Staging" ofType:@"plist"];
#elif defined PROD
    filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Production" ofType:@"plist"];
#endif
    FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
    [FIRApp configureWithOptions:options];

Update run script

AppStoreConfiguration="AppStore"
DevReleaseConfiguration="Dev Release"
StagingReleaseConfiguration="Staging Release"
ProdReleaseConfiguration="Prod Release"

if [ "$AppStoreConfiguration" = "${CONFIGURATION}" ]; then
echo "Running Crashlytics (AppStore)"
"${PODS_ROOT}/FirebaseCrashlytics/run" -gsp "${PROJECT_DIR}/wapos-iPad/GoogleService-Info-Production.plist"
echo "Uploading dSYM"
find "${DWARF_DSYM_FOLDER_PATH}" -name "*.dSYM" | xargs -I \{\} "${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/wapos-iPad/GoogleService-Info-Production.plist" -p ios \{\}
elif [ "$ProdReleaseConfiguration" = "${CONFIGURATION}" ]; then
echo "Running Crashlytics (Release)"
"${PODS_ROOT}/FirebaseCrashlytics/run" -gsp "${PROJECT_DIR}/wapos-iPad/GoogleService-Info-Production.plist"
echo "Uploading dSYM"
find "${DWARF_DSYM_FOLDER_PATH}" -name "*.dSYM" | xargs -I \{\} "${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/wapos-iPad/GoogleService-Info-Production.plist" -p ios \{\}
elif [ "$StagingReleaseConfiguration" = "${CONFIGURATION}" ]; then
echo "Running Crashlytics (Staging)"
"${PODS_ROOT}/FirebaseCrashlytics/run" -gsp "${PROJECT_DIR}/wapos-iPad/GoogleService-Info-Staging.plist"
echo "Uploading dSYM"
find "${DWARF_DSYM_FOLDER_PATH}" -name "*.dSYM" | xargs -I \{\} "${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/wapos-iPad/GoogleService-Info-Staging.plist" -p ios \{\}
elif [ "$DevReleaseConfiguration" = "${CONFIGURATION}" ]; then
echo "Running Crashlytics (Dev)"
fi

Migrate some methods.


https://firebase.google.com/docs/crashlytics/upgrade-sdk?platform=ios#the_library_is_now_called_firebasecrashlytics


Last step, remove Fabric API Key setting from info.plist.

OK, that’s it.

Continue Reading Migrate from Fabric Crashlytics SDK to Firebase Crashlytics SDK