DCloud_App_Array
DCloud_App_Array
  • 发布:2014-08-02 23:32
  • 更新:2024-12-05 15:32
  • 阅读:624824

iOS离线打包

分类:HTML5+

最新iOS平台App本地离线打包,请前往https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios


预备环境

SDK目录说明

  • HBuilder-Hello:离线打包演示应用;
  • Feature-iOS.xls:iOS平台各扩展Feature API对应的库文件列表;
  • Readme.txt:说明文件。

注意:HBuilder运行环境相关库文件已全部包含在HBuilder-Hello演示应用中

配置编译工程

  • 从演示应用HBuilder-Hello创建工程

解压SDK包,进入目录HBuilder-Hello, 双击“HBuilder-Hello.xcodeproj”文件打开工程:
(建议不要将工程移出SDK目录,如需移动工程则要重新引入头文件和静态库文件到工程里)

- 配置应用标识(Bundle Identifier)

选择左侧“Project Navigator”中应用工程根目录,选中TARGETS下的HBuilder打开工程属性界面,在General下修改Identity的值:

其中Bundle Identifier为苹果的AppID,必须与应用发布是配置的Profile关联的AppID一致;Version为应用版本号,在App Store中显示的版本号,推荐与manifest.json中version下的name值一致;Build为编译版本号,App Store判断升级使用,推荐与manifest.json中version下的code值一致。

- 配置应用名称

1、在打开的原生工程中,点击工程的targets和点开manifest文件,然后将manifest文件里的“name”字段的内容 和原生工程里的Display Name 的写成一样。注意,manifest文件里的”name“ 对应的是HBuilderX打开的工程里的“基础配置”里的应用名称。如下图红色框所示:


2、如果需要配置国际化,在工程导航界面,选择InfoPlist.strings文件,修改CFBundleDisplayName值为应用名字:
InfoPlist.strings(English)为英文系统应用名,Simplified为中文简体系统应用名


- 配置应用版本名称
在打开的原生工程中,点击工程的targets和点开manifest文件,然后将manifest文件里的“version”字段里的“name”的内容 和原生工程里的Version 的写成一样。注意,manifest文件里的“version”字段里的“name” 对应的是HBuilderX打开的工程里的“基础配置”里的应用版本名称。如下图红色框所示:


- 配置应用版本号
在打开的原生工程中,点击工程的targets和点开工程里的manifest文件,然后将manifest文件里的“version”字段里的“code”的内容 和原生工程里的Build 的写成一样。注意,manifest文件里的“version”字段里的“code” 对应的是HBuilderX打开的工程里的“基础配置”里的应用版本号。如下图红色框所示:

- 配置应用图标和启动界面

第一种Launch Images Source方式

1、按下图所示,在配置的地方设置为空,这样配置之后启动界面就会是splash目录里配置的图了,就不会是LaunchScreen.storyboard 作为启动界面了。


2、演示工程中已经配置好了应用的图标和启动界面,只需要将对应的,符合要求的图片拷贝到对应工程里的icon和splash目录即可:

第二种Launch Screen File方式

1、按下图方法配置Launch Screen File,这样配置之后启动界面就会是设置的LaunchScreen.storyboard。


2、制作LaunchScreen.storyboard(这个storyboard的名称是可以自定义的),如果想自定义LaunchScreen.storyboard,这需要你会原生知识,知道怎样创建Launch Screen File,知道怎样在storyboard中布局视图,设置约束等。如果不想自定义,可以使用官方已经制作好的storyboard,官方提供了2个storyboard,一个是图标、名称在上方的;另外一个是图标、名称在下方的。
注意:在使用Launch Screen File方式作为启动界面时,需要把一张或几张清晰的图标拷贝到app.imageset文件夹下,用来给启动界面加载图标。如果拷贝过去的图标不清晰会导致启动界面上的图标不清晰、模糊的现象出现。

- 更新应用资源

注意:Pandora目录为folder references引入方式,修改后不会自动更新,需要在模拟器或设备删除应用后再重新运行  
注意:拷贝到Pandora目录的www目录中manifest.json需要删除注释

如何从HBuilderX中导出应用资源请参考:HBilderX生成本地打包App资源

打开pandora -> apps 目录,将下面“HelloH5”目录名称修改为应用manifest.json中的id字段值,uni-app项目为manifest.json中的appid字段值(这步非常重要,否则会导致应用无法正常启动),并将所有应用资源拷贝到其下的www目录中:

- 配置应用信息

打开工程目录下的control.xml文件,修改appid值:

其中appid值为HBuilder应用的appid,必须与应用manifest.json中的id字段值(uni-app项目为manifest.json中的appid字段值)完全一致;appver为应用的版本号,用于应用资源的升级,必须保持与manifest.json中的version -> name值完全一致;version值为应用基座版本号(plus.runtime.innerVersion返回的值),不要随意修改。

- 配置应用使用的5+功能模块(可选)

演示应用中已经引用HBuilder所有扩展的5+ API功能模块,如果在应用中没有使用到,为了减少发布时安装包的大小可以删除不使用的模块。按下图打开链接库文件配置列表:

在“Feature-iOS.xls”文件中查找不使用模块对应的“LinkerFlags”,从列表中删除。
如不使用“相机模块”,则可选中“liblibCamera.a”、按退格键删除(按option键可以多选):

- 配置第三方库的参数

如果用到使用第三方库的功能模块(如推送、分享、语音识别、统计),则需要通过“Feature-iOS.xls”文件中查找对应模块的“Info”值,并在工程属性界面“Info”下“Custom iOS Target Properties”中找到对应的项配置:

如百度地图,需要配置在百度云平台申请应用的appkey,找到“baidu”项下的“appkey”,双击后输入正确的appkey值:

注意:新浪微博和微信分享还需要配置应用的URL Schemes,在“URL Types”项下分别输入在各开放平台申请的值:

配置完成编译运行

应用配置完毕,在模拟器上编译运行应用:

正确编译后启动模拟器并运行:

如何配置多渠道和广告

在需要的打包的原生工程中找到工程的配置文件-Info.plist ,然后添加marketChannel节点,节点内容格式为:包名|应用标识|广告标识|渠道 如io.dcloud.HB|appid|adid|apple
包名:对应xcode里的bundleid,如io.dcloud.HBuilder。
应用标识:对应5+或uni-app项目manifest.json中appid。
广告标识:DCloud的广告标识,开通广告后可在dev.dcloud.net.cn获取,如果没有开通广告,设置值为空即可。
渠道:可以填apple。

注意:如果要配置广告,需要2个步骤:
1.在info.plist文件里加DCLOUD_AD_ID节点,内容 为自己申请的广告adid
2.把marketChannel节点的广告标识换成申请的广告标识。如下图所示:

如何关闭广告

5+SDK里默认打开了开屏广告,用户如果不需要开屏广告可在Appdelegate.m文件中注释如下部分,并删除ad库文件,即可关闭广告

// 示例默认带开屏广告,如果不需要广告,可注释下面一行,  
#define ENABLEAD


如果需要关闭其他类型的广告可在应用的manifest.json文件中增加如下配置

    "plus": {  
        "ads": {  
            "push":"false",       
            "splash":"false",     
            "rp":"false",          
            "spot":"false",       
        }  
    }

说明可参考文档 Manifest.json文档说明 manifest配置ads部分

如何配置3D Touch

配置3D Touch

如何配置IDFA

首先要知道:打开IDFA不影响AppStore审核
如何知道项目中是否使用广告标示符,其实就是查看framework中是否有个叫AdSupport.framework的框架,如果检查工程中没有AdSupport.framework,可能是接入的第三方库里面有,用以下方法检查第三方中是否包含有IDFA版本:
(1)打开终端cd到要检查的文件的目录;
(2)执行命令:grep -r advertisingIdentifier . (注意别少了点);
iOS平台配置应用使用广告标识(IDFA)

如何配置启动时是否注册Push

如何配置启动时是否注册Push

提交审核时提示有其他支付并隐藏功能被拒的处理办法

点击处理办法

Android平台请参考Android离线打包

17 关注 分享
jwenlee hellojh 大虫 sbin ___K Jino_Yang MR不靠谱 chuyin 五叶神 4***@qq.com Bu忘初心_ 2***@qq.com 赵庆桥 1***@qq.com 3***@qq.com k***@qq.com d***@126.com

要回复文章请先登录注册

9***@qq.com

9***@qq.com

用这个打包出来的项目变成300多M了 好大呀,这该怎么办呢?
2017-01-12 08:39
z***@21cn.com

z***@21cn.com

回复 苏格拉底 :
ios9以上手动在info->URL Types里面新增一个URL Schemes:hbuilder
2017-01-10 01:32
rein

rein

clang: error: linker command failed with exit code 1 (use -v to see invocation)
这个是什么错误啊?
2017-01-06 16:33
Henry_Wang

Henry_Wang

我的提示确实Storage模块, 但是我看mainfest.json中有这个啊, 这个要怎么添加?
2017-01-05 08:51
小聪拌豆腐

小聪拌豆腐

你好,这个xcode必须需要7.2以上版本支持吗?我的刚好7.2,build一直报framework not found UserNotifications for architecture x86_64
2016-12-22 20:32
1***@qq.com

1***@qq.com

我离线打包时,有好多报错,怎么回事,还有打包时需要证书吗?需要几种证书?到哪去得到这些证书?然后怎么配置证书?
2016-11-01 12:04
6***@qq.com

6***@qq.com

离线打包 报上面那个错误 是那个库没有添加吗?
2016-10-27 11:28
6***@qq.com

6***@qq.com

[__NSCFString JSONValue]: unrecognized selector sent to instance 0x7f8249536b10
2016-10-27 11:28:03.268 LogisticsDriver[2310:1050726] Post crash result--[成功]--data--[]
2016-10-27 11:28:03.268 LogisticsDriver[2310:1050726] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString JSONValue]: unrecognized selector sent to instance 0x7f8249536b10'
*** First throw call stack:
(
0 CoreFoundation 0x0000000109cf0d85 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010c47cdeb objc_exception_throw + 48
2 CoreFoundation 0x0000000109cf9d3d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x0000000109c3fcfa ___forwarding___ + 970
4 CoreFoundation 0x0000000109c3f8a8 _CF_forwarding_prep_0 + 120
5 LogisticsDriver 0x000000010638f158 -[PDRCoreAppCongfigParse load] + 355
6 LogisticsDriver 0x0000000106372e25 -[PDRCoreApp load] + 1095
7 LogisticsDriver 0x00000001063698be -[PDRCoreAppManager load] + 211
8 LogisticsDriver 0x00000001063617cd -[PDRCore load] + 952
9 LogisticsDriver 0x0000000106360f83 +[PDRCore initEngineWihtOptions:withRunMode:withAppManager:] + 119
10 LogisticsDriver 0x00000001063380ba -[AppDelegate application:didFinishLaunchingWithOptions:] + 58
11 UIKit 0x0000000107f5b9ac -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 272
12 UIKit 0x0000000107f5cc0d -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3415
13 UIKit 0x0000000107f63568 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1769
14 UIKit 0x0000000107f60714 -[UIApplication workspaceDidEndTransaction:] + 188
15 FrontBoardServices 0x000000010f19b8c8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
16 FrontBoardServices 0x000000010f19b741 -[FBSSerialQueue _performNext] + 178
17 FrontBoardServices 0x000000010f19baca -[FBSSerialQueue _performNextFromRunLoopSource] + 45
18 CoreFoundation 0x0000000109c16301 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
19 CoreFoundation 0x0000000109c0c22c __CFRunLoopDoSources0 + 556
20 CoreFoundation 0x0000000109c0b6e3 __CFRunLoopRun + 867
21 CoreFoundation 0x0000000109c0b0f8 CFRunLoopRunSpecific + 488
22 UIKit 0x0000000107f5ff21 -[UIApplication _run] + 402
23 UIKit 0x0000000107f64f09 UIApplicationMain + 171
24 LogisticsDriver 0x0000000106338433 main + 99
25 libdyld.dylib 0x000000010cbe792d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
2016-10-27 11:28
1***@qq.com

1***@qq.com

iOS离线打包配置支付宝模块时报错:
Undefined symbols for architecture x86_64:
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)", referenced from:
CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::reserve(unsigned long)", referenced from:
CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
CAliSecXURL::encodeURIComponent(CAliSecXBuffer&) in AlipaySDK
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
2016-10-24 16:06
又起风了

又起风了

回复 骁骑 :
非常感谢,已经搞定。
2016-09-27 16:13