uni-app实现XCode苹果本地离线打包APP
本文适用无其他任何功能的离线打包,其余功能,请关注后续文章
坑:苹果系统和xcode升级后,以为插件引用了第三方包,同一操作打包,报错AMapFoundationKit/AMapFoundationKit.h' file not found
,其实已经引用过文件了
1、前提
1.已安装某版本的HBuilderX(以最新3.1.18为例),
2.已安装xcode,
3.有代码已能调试运行
4.注册HBuilder账号
5.有Appkey:https://nativesupport.dcloud.net.cn/AppDocs/usesdk/appkey 6.已有苹果的证书
2、官方打包指南入口
1.官方离线打包指南: https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios 2.HBuilderX入口如下:
3、生成WWW文件
登录HBuilder账号,配置manifest.json,DCloud appid登录后点击“重新获取” ,再点发行
,原生APP-本地打包
,生成本地打包App资源
4、解压,xcode打开项目
5、修改基本配置
以com.test.aytestcc
为例:
com.test.aytestcc
6、修改证书
根据APPstore 生成的证书,选择调试和发布版本的证书
配置签名证书相应的设置
6、修改图标、启动图
图标
若有已有包,可以选中show in finder
,把新项目的APPIcon
删除,把旧的APPIcon.appiconset
拖过去
启动图:先拖图片,后建View
把需要用到的启动图拖到Images.xcassets
下
往LaunchScreen.storyboard
中View添加Image View
设置图片大小
选择图片做为启动图
7、修改APP名称
设置离线APPid
8、添加包和值
添加值
添加包
添加系统库
可以直接搜
,添加即可,添加SDK中有的依赖需要选Add Files
,一般依赖库
在sdk的Libs
,依赖资源
在Bundles
里
其中依赖资源很容易被忽略,这个标的不准,有的是sdk里面的内容,标在系统库,找不到的时候,都找找,总之还是有坑。。。
若没看到文件
,就从弹框的左上角,一路选下去,选到相应版本的sdk目录
9、运行生成
10、其他模块
10.1 接入搜索关键字
10.1.1 引入定位及地图所需文件
10.1.2 新建及修改文件
需要修改的文件位置及文件如下:(GKSearchInfo为新建class,一直选默认的就好)
10.1.2.1 GKSearchInfo
GKSearchInfo.h
#import <Foundation/Foundation.h>
typedef void (^SearchResultBlock)(NSArray *arr);
@interface GKSearchInfo : NSObject
+ (instancetype)shareInstance;
- (void)searchKeyInfo:(NSString *)key resultBlock:(SearchResultBlock)resultBlock;
@end
GKSearchInfo.m
#import "GKSearchInfo.h"
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <AMapSearchKit/AMapSearchKit.h>
@interface GKSearchInfo ()<AMapSearchDelegate>
@property (nonatomic,copy)SearchResultBlock searchtResultBlock;
@property (nonatomic,strong)AMapPOIKeywordsSearchRequest *searchRequest;
@property (nonatomic,strong)AMapSearchAPI *search;
@end
static GKSearchInfo * _keyInfo = nil;
@implementation GKSearchInfo
+ (instancetype)shareInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_keyInfo = [[GKSearchInfo alloc] init];
});
return _keyInfo;
}
- (void)searchKeyInfo:(NSString *)key resultBlock:(SearchResultBlock)resultBlock
{
// 先进行在线建议查询
[self suggestionSearchWithKey:key];
self.searchtResultBlock = resultBlock;
}
- (void)suggestionSearchWithKey:(NSString *)key
{
if(!self.search){
self.search = [[AMapSearchAPI alloc] init];
}
if (!self.searchRequest) {
self.searchRequest = [[AMapPOIKeywordsSearchRequest alloc] init];
}
self.search.delegate = self;
self.searchRequest.keywords = key;
self.searchRequest.city = @"城市";
// self.searchRequest.types = @"类型";
self.searchRequest.requireExtension = YES;
[self.search AMapPOIKeywordsSearch:self.searchRequest];
}
#pragma mark - BMKSuggestionSearchDelegate
/* POI 搜索回调. */
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response
{
if (response.pois.count == 0)
{
return;
}else{
NSMutableArray *mutArr = [NSMutableArray new];
for (AMapAOI *aoi in response.pois) {
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithCapacity:0];
[dic setObject:@(aoi.location.latitude) forKey:@"lat"];
[dic setObject:@(aoi.location.longitude) forKey:@"lng"];
NSString *keyList = aoi.name;
[dic setValue:keyList forKey:@"keyword"];
[mutArr addObject:dic];
}
!self.searchtResultBlock?:self.searchtResultBlock(mutArr);
}
}
- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error{
NSLog(@"%@",error);
}
@end
10.1.2.2 TestModule
TestModule.h
#import <Foundation/Foundation.h>
#import "DCUniModule.h"
NS_ASSUME_NONNULL_BEGIN
@interface TestModule : DCUniModule
@end
NS_ASSUME_NONNULL_END
TestModule.m
#import "TestModule.h"
#import "GKSearchInfo.h"
@implementation TestModule
// 通过宏 UNI_EXPORT_METHOD 将异步方法暴露给 js 端
UNI_EXPORT_METHOD(@selector(testAsyncFunc:callback:))
/// 异步方法(注:异步方法会在主线程(UI线程)执行)
/// @param options js 端调用方法时传递的参数
/// @param callback 回调方法,回传参数给 js 端
- (void)testAsyncFunc:(NSDictionary *)options callback:(UniModuleKeepAliveCallback)callback {
// options 为 js 端调用此方法时传递的参数
if (!options[@"key"]) {
return;
}
[[GKSearchInfo shareInstance] searchKeyInfo:options[@"key"] resultBlock:^(NSArray *arr) {
if (callback) {
// 第一个参数为回传给js端的数据,第二个参数为标识,表示该回调方法是否支持多次调用,如果原生端需要多次回调js端则第二个参数传 YES;
callback(arr,NO);
}
}];
}
// 通过宏 UNI_EXPORT_METHOD_SYNC 将同步方法暴露给 js 端
UNI_EXPORT_METHOD_SYNC(@selector(testSyncFunc:))
/// 同步方法(注:同步方法会在 js 线程执行)
/// @param options js 端调用方法时传递的参数
- (NSString *)testSyncFunc:(NSDictionary *)options {
// options 为 js 端调用此方法时传递的参数
NSLog(@"%@",options);
/*
可以在该方法中实现原生功能,然后直接通过 return 返回参数给 js
*/
// 同步返回参数给 js 端 注:只支持返回 String 或 NSDictionary (map) 类型
return @"success";
}
@end
10.1.2.3 AppDelegate.m
初始化sdk的高德key, 添加代码位置如下图:
#import <AMapFoundationKit/AMapFoundationKit.h>
[AMapServices sharedServices].apiKey = @"申请对应应用的高德的苹果的key";