uniapp 离线打包 iOS直播文稿 未修正版

最近使用hbuildx打包 uniapp 总是失败,而且没有提示失败原因,浏览官方发现官方是有离线打包指导的,所以本文以文字版记载一次离线打包所遇到的问题。

未修正版

离线打包的概念

  1. 使用 hbuildx 生成本地APP 打包资源 如图
    -w779

  2. 点击 iOS 本地打包指南(这里原来是 iOS 离线打包指南的,叫做本地打包更形象吧)

  3. 先看一下 iOS 本地打包指南 先说下这里的前提 官方这里是以 h5plus APP 来讲的,也就是说 不是针对 uniapp 的。 这里不赘述h5plusuniapp 的不同 具体可以见 uniapp的介绍 和 h5plus的介绍
    重点说关键点 这里不要管
    -w754

  4. 好 开始按照官方的下载打包 还以为之前的删掉了。。。我就用之前下载的了 解压 最新版本 一定要下载最新版本

  5. -w557
    这个 文件夹是我们需要的 先来处理 打开直接使用 xcode 运行项目(双击运行HBuilder-Hello.xcodeproj)
    -w303
    框中的文件的文件需要更换 splash 下的文件 要保持文件名一致,如果不一致需要自行修改 info.plist 中的文件名
    第一步 先来更图标、然后打开 storyboard 可以看到图标已经更换了 如果要更换其他启动页图标需要这样设置
    -w779
    第二步 点击运行先看一下 。。。。 正常
    然后开始更换 h5plus webview 的内容(也就是我们用 uniapp 制作的应用内容)
    第三步 使用hbuildx 的生成本地 APP 包功能生成本地 APP 内容
    -w984
    这就意味着着生成了, 注意这框出的部分为 appid 我自定义的 如无必要请使用官方的 AppID __UNI__xiaomishu 整个文件夹复制,然后放入 padora/apps 目录下 原来的文件可以删除 然后更改 control.xml 中的appid 属性为__UNI__xiaomishu (这里的 AppID 就是文件夹的目录名 一定不要错了 也不能随意更改 copy 的时候是什么名就是什么名) 然后xcode运行项目测试
    OK 正常了 我们打包

这样就 OK 了 可以正常上传 这里有个问题需要注意 就是广告内容 建议先删除 官方的指导中 有说明 //#define ENABLEAD 先把这个禁用了 然后删除指定的类库 liblibAdSupport.a 删除后也是正常运行的

问题来了 1、 APP 的名字怎么改。。 名字不对啊
-w142

改了bundle_display_name 不行呢? 。。
需要改的是Bundle name 。。。 怎么还不对?
还有几个 name 来改一下 。。。 我错了。。。 这里需要改的是CFBundleDisplayName
其他改动先不说了 毕竟剩下的就是删类库 改 info.plist 了

请务必做到每一次删除类库或者删除info.plist 属性时点击保存或者使用版本库提交一次 确保项目 能够回滚。 毕竟作为一个 iOS 原生开发的门外汉,每一步都能够恢复回去是一个非常重要的步骤。 当然 熟练后就好了 基本就摸清类库引入的门道了。

下面我需要说的是无意中发现的官方更新的手册 创建精简的项目。 先暂停下 。。。大家听会歌

  1. 好了先说网址 iOS 创建最精简打包项目

先说明 我用的是 xcode 10.1 有一个坑 没有 libstdc++.tbd 。。。。 需要用 libc++.tbd 代替 记住我们不需要 再去下载 libstdc++ 的类库
从libstdc++到libc++ 如果原有项目有libstdc++只需要移除后然后更换为 libc++ 即可。。。。

  1. 开始 创建一个项目 signle view 即可

大家看官方的指导即可创建完精简打包原生项目

下面需要注意的来了。。。。。
运行会报错。。。。。。。。 为什么 需要排查下 。。。点击红点
-w357

我这里报错 是因为我一开始拷贝文件的时候弄错了 没有覆盖原文件 而是 再次引用了。。
重来。。。。
重新来过 好了 点击运行正常打包 然后模拟器开始弹窗

  1. 缺失。。 nativeUI Storage模块 NativeObj 模块 navigator 模块 一个个的来

liblibNavigator.a
liblibNativeUI.a

这两个文件没有引入
AVFoundation.framework
AssetsLibrary.framework
AddressBook.framework
CoreLocation.framework
这几个类库没有引入的需要引入
liblibStorage.a storage.framework(这个文件在 hbuild 的离线包里面 不是 ios12.1的基础框架)
liblibNativeObj.a 之前顺手引入了。。
navigator 模块也已经顺手引入了。。。。
看 官方压缩包的那个Excel 继续运行
报错

ld: framework not found storage
是因为在当前项目中找不到这个 storage.framework copy到项目中在引入
OK 了 目前没有报错 打包项目的构建 基本完成

但是。。。。 还没有完。。。 需要你明确项目中用了什么。。。。比如这里。。。
扫码这里就来了。。 所以需要 明确项目中的内容。。。 同时有用到权限申请的需要增加权限描述
比如这个一维码就需要使用摄像头。。。
仍然从Excel 中找 这个 barcode 模块
需要引入 liblibBarcode.a
AVFoundation.framework
AddressBookUI.framework
AddressBook.framework
ImageIO.framework
CoreVideo.framework
CoreMedia.framework
libiconv.2.tbd

这里应该是有坑的。。。。 因为 12.1 中 的 photos.framework photosUI.framewor需要引用 先编译 然后看报错。。。 看不到了 发现好像摄像头没调用啊。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
blibCamera.a(TZImageManager.o)
___58-[TZImageManager getOriginalPhotoWithAsset:newCompletion:]_block_invoke in liblibCamera.a(TZImageManager.o)
___59-[TZImageManager getOriginalPhotoDataWithAsset:completion:]_block_invoke in liblibCamera.a(TZImageManager.o)
"_OBJC_CLASS_$_PHImageRequestOptions", referenced from:
objc-class-ref in liblibCamera.a(TZImageManager.o)
"_PHImageResultIsInCloudKey", referenced from:
___95-[TZImageManager getPhotoWithAsset:photoWidth:completion:progressHandler:networkAccessAllowed:]_block_invoke in liblibCamera.a(TZImageManager.o)
"_OBJC_CLASS_$_PHImageManager", referenced from:
objc-class-ref in liblibCamera.a(TZAssetCell.o)
objc-class-ref in liblibCamera.a(TZImageManager.o)
objc-class-ref in liblibCamera.a(TZPhotoPreviewCell.o)
ld: symbol(s) not found for architecture x86_64
```
这串报错就是没有引入 photos.framework
这里还有一个权限。。。。 摄像头权限 info.plist 增加属性 Privacy - Camera Usage Description

后面有一个导入通讯录
等下看看
缺少 contacts 模块

[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSContactsUsageDescription key with a string value explaining to the user how the app uses this data.
` 要增加通讯录 描述

基本就是到这里了。。 谢谢大家

之后都是歌曲了。。。。想听歌的可以停一下 看看我的爱好和你是否相同