====== iOS APP 集成 ====== 目前,环信的 React Native iOS Demo 已经提供登录、注册、好友、群组、聊天等功能。您可以在您的 React Native 项目中集成 iOS Demo,以便直接获得即时通讯功能。 ===== Demo 及源码下载 ===== === Demo 下载 === 在[[http://www.easemob.com/download/im|环信官网扫码下载]],然后按照指示安装。 注意:安装后需要添加企业信任才能正常运行(设置 -> 通用 -> 设备管理 -> EaseMob Inc -> 点击信任)。 === Demo 源码下载 === GitHub 下载地址:https://github.com/easemob/webim-react-native ===== 搭建开发环境 ===== === 基础环境安装 === 安装 iOS 和 android 的开发环境。React Native 官方文档:https://facebook.github.io/react-native/docs/getting-started.html === 模拟器安装 === 打开 Xcode,安装 iOS 模拟器。 xcode -> Preferences-> Components -> iOS x.x Simulator ===== 初始化 ===== **注意:以下步骤,集成 iOS 和 Android 时,只执行一次即可。** 1. 解压缩 Demo 源码,进入项目所在文件夹,执行如下命令,进行项目初始化。 $ npm run newclear 初始化完成后,项目下会自动生成node_modules文件夹。 2. 修改 node_modules/axios/lib/utils.js 文件。 function isStandardBrowserEnv() { return false; } 3. 去工程Libraries中找到:RCTNetwork.xcodeproj / RCTNetworking.mm / RCTGenerateFormBoundary,去掉特殊字符 ''/ .'' 等;或者去 node_modules/react-native/Libraries/Network/RCTNetworking.mm 修改。 因为上传文件时服务端rest服务会限制content-type不能出现特殊字符。 //修改后: const char *boundaryChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; ===== 注意事项 ===== 1. **默认没有添加签名的情况下请编译debug版本,直接编译release版本会无法正常运行。** * 使用Xcode打开项目,选择 app,在 info 页签,选择 Use Debug for command-line builds。 * 在Xcode项目中,选择 Product -> Scheme -> Edit Scheme (cmd + <),打开 Run 页签,将 Build Configuration 设置为 Debug。 2. **目前代码版本0.2.0,请看项目目录下package.json -> version属性,如果不是,请更新代码,并保留node_modules文件夹。** 3. **0.2.0版本部分依赖的模块升级请先运行`npm install`安装升级包,安装完成后,清理缓存。** * ''npm run clean'' * 打开xcode项目,选择product -> clean * 如果之前有编译时自动打开的终端,请关闭终端 4. 关于node_modules文件夹。 初始化时,在根目录下执行''npm run newclear''后,会生成node_modules文件夹,是项目运行所需要的基础依赖包。 由于node_modules比较大,400mb左右, 安装时耗时比较久,所以已经install过node_modules的项目,可以备份node_modules。当安装新的项目的时候,拷贝node_modules到新项目,并运行''npm install'', 如果此步无法正常运行项目再执行上面的“初始化”流程。 ===== 调试与发布 ===== ==== 模拟器测试 ==== 执行如下命令,在模拟器中运行 iOS Demo。 react-native run-ios --simulator "iPhone 7" 模拟器运行时的操作: * cmd + d 调出控制台 * cmd + r reload **注意:**如果执行命令时报“CFBundleIdentifier” Does Not Exist这个错误,请参考下一步先配置Xcode。 ==== 真机测试 ==== 1. 配置 Xcode。 * Targets -> app -> General -> Signing ->添加一个个人icloud账户 * 添加team,并定义一个唯一的Bundle Identifier 如:org.reactjs.native.example.app.lwz * Targets -> app -> General -> Signing -> Team * Targets -> app -> General -> Signing -> Signing Certificate * Targets -> app -> General -> Identity -> Bundle Identifier -> 修改唯一id标示 * Targets -> appTests -> General -> Signing -> Team * Targets -> appTests -> General -> Signing -> Signing Certificate * 选择 Product -> Scheme -> Edit Scheme (cmd + <),打开 Run 页签,将 Build Configuration 设置为 Release。 2. Xcode 保证app/main.jsbundle可用,没有自行添加索引。 * main.jsbundle 生成方式 * curl的方式打包 https://github.com/facebook/react-native/issues/5747 * react-native bundle --dev false --platform ios --entry-file ./index.ios.js --bundle-output ./ios/app/main.jsbundle * 此种方式打包不支持npm link, 需要先npm unlink easemob-websdk 3. 关掉npm start启动的控制台。 * 因为打包时会判断是否有packager在运行,有的话直接使用。 * 但是打包用的是release版本, 非dev,打包后会报babel的错,如上。 4. 在xcode通过正常run编译到手机。 在 Xcode 中,选择设备,然后点击 Run。 * 没有packager启动时,会自动启动一个packager,这时打包的即为发布版本。 * 注意:跟本地之前引入的main.jsbundle没有关系,打包文件并不会更新到本地。 5. 信任证书: 选择“ios设备 -> General -> Device Management -> persion Certificate -> trust it”。 成功运行后,如果是debug模式可以晃动手机调出控制台。 ==== 常用命令 ==== $ npm start $ react-native run-ios --simulator "iPhone 7" $ react-native run-ios $ react-native bundle --dev false --platform ios --entry-file ./index.ios.js --bundle-output ./ios/app/main.jsbundle ===== 常见问题 ===== **注意事项:** * 切换debug 或 release 版本都需要关闭控制台。 * 执行''react-native run-ios --simulator "iPhone 7"''命令时,需保证没有真机连接到电脑。如果有真机连接到电脑,那么多个设备均可以编译成功,但是无法正常启动。 **Q: 如果编译不生效,怎么办?** A: 可以尝试先clean(在 Xcode 中,选择“Product -> Clean”),关掉package控制台,再run。 ---- 上一页:[[im:react-native|React Native Demo 介绍]] 下一页:[[im:react-native:android-app|Android APP 集成]]