Cara integrasi React Native dengan Swift dan CodePush (Panduan lengkap) — Bag. 2

abdul fattah ikhsan
3 min readOct 1, 2018

--

Codepush

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 Librariespada bagian Navigation Pane (sebelah kiri / project struktur) sudah ada file CodePush.xcodeprojdan di Build phase >Link Binaries With Librariessudah ada libCodePush.a dan libz.tbd

link codepush

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)

AppDelegate include Codepush

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.

Swift Flags

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!

--

--

abdul fattah ikhsan

If I am immortal, I will spend my time to learn everything in the universe.