uni-app实现XCode苹果本地离线打包APP

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";

申请高德key链接

有疑问

微信小程序联系客服,及时沟通
地图轨迹预览效果

扫描公众号,了解更多实例与资源免费分享:
实例分享

参考

前辈传授及官方指南摸索所得
远程控制苹果设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wx_h13813744

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值