Cara integrasi React Native dengan Swift dan CodePush (Panduan lengkap) — Bag. 2
Seteleh lama gak nulis di beberapa minggu terakhir karena aktivitas yang padat 😌, akhirnya kali ini gua sempetin lanjutan dari artikel sebelumnya. Ini bakalan singkat dan ga bertele-tele, cukup singkat karna sisanya cuma cara integrasi codepush ke file Swift kita.
Install Codepush
Kita pakai react-native-code-push
yarn add react-native-code-push
kemudian link ke project kita, seperti yang dijelasin di cara instalasi resminya.
react-native link react-native-code-push
Perintah tersebut akan menambahkan file-file yang dibutuhkan secara otomatis. Dan untuk memastikan lagi, bisa kita buka folder Libraries
pada bagian Navigation Pane (sebelah kiri / project struktur) sudah ada file CodePush.xcodeproj
dan di Build phase
>Link Binaries With Libraries
sudah ada libCodePush.a
dan libz.tbd
Integrasi ke AppDelegate
Kalau sudah benar maka lanjut ke langkah selanjutnya, kita panggil (import) Codepush
ke file Bridging-Header
kita.
Langkah selanjutnya adalah panggil di AppDelegate.swift
. Tapi sebelumnya mau jelasin sedikit. Seperti yang dijelasin di tutorial resminya.
NSURL *jsCodeLocation;
#ifdef DEBUG
jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios&dev=true"];
#else
jsCodeLocation = [CodePush bundleURL];
#endif
Atau jika kita masih menggunakan AppDelegate.m (Objective-C ) setelah melakukan react-native link
maka otomatis menjadi:
#ifdef DEBUGjsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@”index” fallbackResource:nil];#elsejsCodeLocation = [CodePush bundleURL];#endif
Nah, pertanyaannya di Swift file statement #ifdef
apakah valid? jawabannya ga valid. Tapi apaan sih #ifdef — #else — #endif
statement? gua coba google dan nemu di wikipedia, di wikiversity dan di stackoverflow. Ok, Dah jelaskan itu cuma preprocessor macros, kondisi yang bakal jalan sebelum kompilasi(compilation) seperti find and replace di editor.
Ok, kembali ke permasalahan. gimana nambahin ke Swift? easy bro!. mari kita ubah bagian ini
let jsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: “index”, fallbackResource: nil)
jadi
let jsCodeLocation: URL#if DEBUGjsCodeLocation = RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackResource: nil)#elsejsCodeLocation = CodePush.bundleURL()#endif
lengkapnya (line 19)
Tambahkan Swift Flag
Masih belum selesai, kita harus nambahin custom flag di Swift compiler di Build Settings > Swift Compiler — Custom Flags > Other Swift Flags
pastikan All dan Combined berwarna biru atau aktif. Tambahin -DDEBUG
di Debug flag dan -DRELEASE
di Release flag.
Ok selesai, coba kita Build / Run. Sukses pastinya. Untuk referensi di sini dan di sana.
Kesimpulan
Untuk mastiin codepush — nya jalan atau ga, kita harus punya akun apple developer dulu kemudian masukin deployment key di info.plist
, karena codepush jalan di versi release atau production. Tapi kalau ga da masalah pas kompilasi pasti bisa. Jika kalian ada pertanyaan boleh komen di bawah. Dan baca-baca lagi dokumentasi codepush, di sana lengkap kok.
Lumayan nambah ilmu lagi ya kan! gua kira cukup sampai sini aja, kurang lebihnya mohon maaf. Terima kasih!