App 开发笔记

异常上报

新版本的 Sentry 配置

目前新版本是

1
2
"@sentry/cli": "^1.59.0",
"@sentry/react-native": "^3.4.3",

最新的 Sentry 只需要运行一下命令

1
2
npx @sentry/wizard -i reactNative -p ios
npx pod-install

为了 Debug 模式不上传 Sentry,防止浪费时间和资源,可以对 Bundle React Native code and images 任务改造为

1
2
3
4
5
6
7
8
9
10
11
12
13
export NODE_BINARY=node
if [ "$CONFIGURATION" == "Debug" ]
then
echo "Norcy_Debug1"
../node_modules/react-native/scripts/react-native-xcode.sh
else
echo "Norcy_Release1"
export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"
export SENTRY_PROPERTIES=sentry.properties

../node_modules/@sentry/cli/bin/sentry-cli react-native xcode \
../node_modules/react-native/scripts/react-native-xcode.sh
fi

Upload Debug Symbols to Sentry 勾选 Fot install builds only 即可

老版本的 Sentry 配置

以下是老的配置,不需要再看了

需要根据指引对 Xcode 工程进行配置,除此之外,还针对 Debug 模式不上传 Sentry,防止浪费时间和资源

生成 sourcemap 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
export NODE_BINARY=node

if [ "$CONFIGURATION" == "Debug" ]
then
echo "Norcy_Debug"
../node_modules/react-native/scripts/react-native-xcode.sh
else
echo "Norcy_Release"
export EXTRA_PACKAGER_ARGS="--sourcemap-output $DERIVED_FILE_DIR/main.jsbundle.map"
export SENTRY_PROPERTIES=../sentry.properties

../node_modules/@sentry/cli/bin/sentry-cli react-native xcode \
../node_modules/react-native/scripts/react-native-xcode.sh
fi

上传 Debug 符号到 Sentry 平台

1
2
3
4
5
6
7
8
9
10
# Type a script or drag a script file from your workspace to insert its path.

if [ "$CONFIGURATION" == "Debug" ]
then
echo "Norcy_Debug"
else
echo "Norcy_Release"
export SENTRY_PROPERTIES=../sentry.properties
../node_modules/@sentry/cli/bin/sentry-cli upload-dif "$DWARF_DSYM_FOLDER_PATH"
fi

用户反馈

兔小槽

日活统计

友盟

隐私协议

App-Privacy-Policy-Generator

AppStore 截图

previewed

App Icon 生成

蒲公英

icon 素材

react-native-vector-icons 优点是占用体积小,缺点是图标有限

最新的 Xcode 安装 react-native-vector-icons 后,每次 pod install 之后都会编译出错,原因是资源重复导入,因此写了以下脚本进行删除

RN 的根目录运行即可

1
2
3
cd ios
pod _1.9.3_ install
sed -i '' 's/.*.ttf\",//g' Paxxword.xcodeproj/project.pbxproj

配色创意

热更新

安装

1
2
3
4
# 安装
yarn global add appcenter-cli
# 登录
appcenter login

客户端需要修改的地方

App 新接入

  1. https://appcenter.ms/apps 新增一个 App
  2. 命令行设置当前 App

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 列出所有 app,确认新增的 App 生效
    appcenter apps list
    # 设置/切换当前 App
    appcenter apps set-current Nx/iRead
    # 列出当前 app,确认切换生效
    appcenter apps show
    # 新增 Release 模式
    appcenter codepush deployment add Release
    # 获取 CODEPUSH_KEY
    appcenter codepush deployment list -k
  3. 【iOS】修改 AppDelegate,详情请参考官方文档

  4. 【iOS】Info.plist 新增 CodePushDeploymentKey,值为第二步获取到的 CODEPUSH_KEY

注意:测试 CodePush 必须不能是 Debug 模式编译出来的 App,Debug 模式默认都会走本地 Server

热更新步骤

  1. 确认当前生效的 App

    1
    2
    3
    4
    # 列出所有 app,确认新增的 App 生效
    appcenter apps list
    # 如果 App 不对则需要切换 App
    appcenter apps set-current YourAppName
  2. 确认当前生效的 JS 版本

    1
    2
    # 列出生效的 JS 包
    appcenter codepush deployment list
  3. 发布新版本

    1
    2
    # 发布
    appcenter codepush release-react -d Release -t "1.0.0" --description "Message"

    注意这里的版本号是 Native App 的版本号,每次热修复的时候都需要注意这个值

    注意如果要覆盖 >=2.0.0 < 3.0.0 的版本,请不要使用 “~2.0.0”,覆盖不到 2.1.0,应该使用 “>=2.0.0”

    版本区间:如果要配置 [2.5.0, 2.5.2] 的版本区间,请到 CodePush 后台,写上 “>=2.5.0 <=2.5.2” 即可,注意中间是有空格的

    你可以使用 -m 表示 Mandatory,强制更新,表示越快越好

附录

1
2
3
4
# 列出生效的 JS 包的 Key(不常用)
appcenter codepush deployment list -k
# 发布历史
appcenter codepush deployment history Release

包发布后台

Universal Link 配置教程

发布 AppStore

Archive 失败

正常编译真机能通过,但是 Archive 提示 library not found for -lBVLinearGradient,原因是 podfile 写的是最低系统版本是 iOS13,而 Xcode 中是 iOS10,而 Archive 是全部平台编译,所以就会导致编译 iOS10 的时候找不到对应的库。修改方法就是让这两处写法保持一致即可

每次 Archive 记得先修改 Build 号

AppStore 页面设置多语言

方法 1:直接设置 CFBundleDevelopmentRegion 的值为 zh_CNen_US

方法 2:添加 lproj 文件

  1. 异常上报
    1. 新版本的 Sentry 配置
    2. 老版本的 Sentry 配置
  2. 用户反馈
  3. 日活统计
  4. 隐私协议
  5. AppStore 截图
  6. App Icon 生成
  7. icon 素材
  8. 配色创意
  9. 热更新
    1. 安装
    2. App 新接入
    3. 热更新步骤
    4. 附录
  10. Universal Link
  11. 发布 AppStore
    1. Archive 失败
    2. 每次 Archive 记得先修改 Build 号
  12. AppStore 页面设置多语言