Skip to main content
Minh Nong
💬
0 discussions

iOS Shell

1. Điều kiện tiên quyết

  • Tài khoản apple developer
  • Được assign vào repo
  • Xcode
  • Ruby 2.7.6
  • Macos

2. Đối tượng đọc

  • Stage Owner
  • Customer Success Engineer
  • Customer Success Specialist

3. Nội dung chi tiết

Bài viết hướng dẫn cài đặt iOS Shell bao gồm 3 phần :

  • 3.1: Cài đặt app

  • 3.2: Deploy ( Fastlane và manual ) : deploy manual thường được sử dụng khi có sự cố như iOs/ xCode được Apple yêu cầu cập nhật version mới nhất mà chưa kịp config trong khi đó cần realease App với task ở trạng thái Urgent

  • 3.3 Các config cần chú ý

3.1. Cài đặt App

Bước 1: Clone repo gcallsshell

 ```
$ cd src
$ npm i

```

Bước 2: Config Apple Certificate và Profile

Đăng nhập vào https://developer.apple.com/

Mục Certificates, Identifiers & Profiles

  • Certificates: Cần 2 Certicates
  • Distribution : Cho phép upload app lên Appstore
  • Development : Cho phép app cài đặt trên thiết bị thật, dành cho debug, dev, test

Nếu chưa có thì tạo mới sau đó download và bấm vào để Cer cài đặt vào keychain trên IOS

  • Profiles: Cần tạo 2 profiles

    Profile thứ nhất: type Distribution cần được map với certificate Distribution

    Profile thứ hai: type Development cần được map với certificate Development

Sau khi tải về, click vào các certificates và profiles để install vào keychain của Macos

Bước 3: Config Xcode

Bước 4: Kết nối iOS với Macos, sau đó chạy thử

$ npm run start

Chọn run iOS

3.2. Tích hợp call từ contact app của iOS

DÙng thư viện Callkit của iOS

Bước 1 :

Xem 2 file CallkitModule.swift và CallKitManager.swift

2 file này là ví dụ để React Native gọi function của Native

Trong CallkitModule có thể viết các hàm mà muốn gọi từ React Native

  • Hiện tại chưa cần dùng tới file Callkit module vì chúng ta không cần sử dụng đến các chức năng hỗ trợ gọi của Callkit, mà chỉ cần dùng chức năng set up contact provider của Callkit và từ đây kết nối với Gcalls App

CallKitManager là nơi khai báo contact provider và xử lý logic của CallKit

  • Khai báo provider, xem hàm providerConfiguration trong CallKitManager.swift

Bước 2 : Lấy số điện thoại từ contact provider và gửi tới React Native

  • Khi user thực hiện 1 action call thông qua provider từ contact app, nó sẽ chạy qua INStartAudioCallIntentIdentifier, từ đây chúng ta có thể lấy thông tin phone number và kết nối với React Native thông qua React Native Bridge ( <React/RCTBridge.h>)

  • Trong file AppDelegate.mm xem hàm - (BOOL)application:(UIApplication )application continueUserActivity:(NSUserActivity )userActivity restorationHandler:(void (^)(NSArray *))restorationHandler

  • React Native sẽ lắng nghe khi 1 cuộc gọi được phát sinh khi User chọn contact provider (Gcalls App), thông qua eventEmitter ( Xem eventEmitter trong file App.tsx), từ đây React Native nhận phoneNumber và chuyển lên CallBox

3.3. FastLane

  • Kiểm tra API Keys cho App Store Connect ( trong thư mục secure ) hoặc tải về theo hướng dẫn của Apple

  • Upload IPA file lên testflight

$ cd ios/
// install fastlane and related package
$ bundle update
$ fastlane demo

Kiểm tra App trên TestFlight


  • Upload IPA file lên App Store
$ cd ios/
$ fastlane release

Nếu bị lỗi không xử lý được, Xem mục 3.4 ( Manual) và thực hiện từ bước 5

3.4. Upload app lên Apple Store( Manual)

Bước 1: Mở Gcalls App với Xcode, sau đó chọn product -> Archive

Bước 2: Distribute App

Bước 3: Chọn App Store Connect

Bước 4: Chọn Upload

Bước 5: Kiểm tra App trên Testfligh, test App

Bước 6: Ở mục iOS App , bấm vào dấu (+), nhập version trùng với version trên Xcode để chuẩn bị update version mới lên store

Bước 7: Chỉnh phần "What new in this version" cho các locale

Bước 8: Scroll xuống phần Version Information -> chọn build version, sau đó click vào Submit for Review và chờ Apple duyệt

Chờ mail của Apple, nếu bị reject, xem nguyên nhân từ phía Apple, resolve và reply lại Apple ( kèm hình ảnh nếu có) và resubmit for review

Ví dụ:

Apple nhập sai thông tin callcenter, dẫn tới việc đăng nhập không được và reject

Reply hướng dẫn Apple sửa lại thông tin test cho đúng, và đính kèm hình ảnh nếu có

4. Kết Luận

  • Cần cải thiện quy trình CICD cho iOS, do hiện tại phải build từ local, push IPA lên gitlab CICD sau đó gitlab dùng cer để upload App lên TestFlight và từ Testflight chúng ta Manual Deploy cho Prod. Hiện tại luồng này cũng không còn chạy do những khi Apple bắt cập nhật phiên bản mới, tốn nhiều thời gian để test và Update lại Xcode. Do sự tác động vào các config của Xcode dẫn đến việc Build không còn suôn sẻ và tốn nhiều công sức so với manual deploy

Tài liệu này hướng dẫn cách cài đặt iOS Shell, nếu có góp ý xin vui lòng điền vào form bên dưới.