编者语:入门总是用一个hello world,总会让人觉得写code会是很容易的事。开篇绑定了一下微信SDK,不会有太多的难点,可是接下来的这个例子如果欠缺一些耐心,估计你整个人就崩溃了(我从来不会放弃任何的事)。ps这里得谢谢CSDN回帖的人,提示我把一些概念搞错了。嗯!我会修正回来。 我直接拿名家@onevat的日志重新把静态库(.a)和动态框架(Framework)的概念重新引用一次,哈哈希望不会有任何理解上的.


       了解更多可以看 https://onevcat.com/2016/01/create-framework/

第三库在iOS 8后更多用Framework进行封装。本篇以高德SDK为例去完成一个Xamarin对Framework绑定的示例, 我乐意为大家填坑。
       高德地图iOS SDK http://lbs.amap.com/api/ios-sdk/summary

我在这里主要用3D地图,主要涉及两个Framework AMapFoundationKit.framework(这是高德的基础库任意地方都需要使用) 和 MAMapKit.framework(3D地图库) 。
       

1. 在命令行下通过sharpie把两个framework进行分别转换
           AMapFoundationKit转换

  1. sharpie bind -framework /your path/AMapFoundationKit.framework -sdk iphoneos10.2

MAMapKit转换

  1. sharpie bind -framework /your path/MAMapKit.framework -sdk iphoneos10.2

2. 分别创建对应于AMapFoundationKit和MAMapKit Binding项目,并把生成文件嵌入对应项目中(你可以参照本系列一进行操作http://blog.csdn.net/u014388424/article/details/55517845),还有把Framework放进Binding项目中的Native References文件夹中。
       
      2. 首先尝试编译AMap.iOS Binding ,估计都不会成功的啦,这是常识吧!
      
      看看错误在Structs
      

是类型错,一般nint需要转换为C#的类型,我这里把它转换成ulong就基本上完事了。 再编译会提示Verify的问题了,把它注释掉。再重新编译就可以顺利把AMapFoundationKit的Binding解决了。(这个和WeChat SDK差不多)。还有别忘记加入using CoreLocation 因为 CLLocationCoordinate2D 需要用到的。

转换时的命名错误也是需要修改
   

修正后为

  1. <span style="font-size:14px;">public enum MAOfflineCityStatus : uint

  2. {

  3. None = MAOfflineItemStatus.None,

  4. Cached = MAOfflineItemStatus.Cached,

  5. Installed = MAOfflineItemStatus.Installed,

  6. Expired = MAOfflineItemStatus.Expired

  7. }</span>

2. 入坑后,再编译AMap.iOS.3D Binding估计你就会哭了,别怕哥帮你刷眼泪。不过这也是一个很好的长经验例子。
      
      初始错误分几种
      a. Structs.cs类型错,这种和第一步一样修正为long
       
      b.ApiDefinition.cs [Verify(ConstantsInterfaceAssociation)]
         这里得说明一下,除了注释这个字段外,还需要合并多个partial interface Constants为一个Constants。

  1. partial interface Constants

  2. {

  3. // extern NSString *const AMapFoundationVersion;

  4. [Field("AMapFoundationVersion", "__Internal")]

  5. NSString AMapFoundationVersion { get; }

  6. // extern NSString *const AMapFoundationName;

  7. [Field("AMapFoundationName", "__Internal")]

  8. NSString AMapFoundationName { get; }

  9. // extern NSString *const MAMapKitVersion;

  10. [Field("MAMapKitVersion", "__Internal")]

  11. NSString MAMapKitVersion { get; }

  12. // extern NSString *const MAMapKitName;

  13. [Field("MAMapKitName", "__Internal")]

  14. NSString MAMapKitName { get; }

  15. // extern const MAMapSize MAMapSizeWorld;

  16. [Field("MAMapSizeWorld", "__Internal")]

  17. MAMapSize MAMapSizeWorld { get; }

  18. // extern const MAMapRect MAMapRectWorld;

  19. [Field("MAMapRectWorld", "__Internal")]

  20. MAMapRect MAMapRectWorld { get; }

  21. // extern const MAMapRect MAMapRectNull;

  22. [Field("MAMapRectNull", "__Internal")]

  23. MAMapRect MAMapRectNull { get; }

  24. // extern const MAMapRect MAMapRectZero;

  25. [Field("MAMapRectZero", "__Internal")]

  26. MAMapRect MAMapRectZero { get; }

  27. // extern NSString *const kMAMapLayerCenterMapPointKey;

  28. [Field("kMAMapLayerCenterMapPointKey", "__Internal")]

  29. NSString kMAMapLayerCenterMapPointKey { get; }

  30. // extern NSString *const kMAMapLayerZoomLevelKey;

  31. [Field("kMAMapLayerZoomLevelKey", "__Internal")]

  32. NSString kMAMapLayerZoomLevelKey { get; }

  33. // extern NSString *const kMAMapLayerRotationDegreeKey;

  34. [Field("kMAMapLayerRotationDegreeKey", "__Internal")]

  35. NSString kMAMapLayerRotationDegreeKey { get; }

  36. // extern NSString *const kMAMapLayerCameraDegreeKey;

  37. [Field("kMAMapLayerCameraDegreeKey", "__Internal")]

  38. NSString kMAMapLayerCameraDegreeKey { get; }

  39. [Field("MAOfflineMapDownloadReceivedSizeKey", "__Internal")]

  40. NSString MAOfflineMapDownloadReceivedSizeKey { get; }

  41. // extern NSString *const MAOfflineMapDownloadExpectedSizeKey;

  42. [Field("MAOfflineMapDownloadExpectedSizeKey", "__Internal")]

  43. NSString MAOfflineMapDownloadExpectedSizeKey { get; }

  44. [Field("MAOfflineMapErrorDomain", "__Internal")]

  45. NSString MAOfflineMapErrorDomain { get; }

  46. }

这里有一些接口的错误
        
        修改为:
        
        需要修正命名错误,用sharpie转换很容易把不同方法转换成同个名字
        

还有把Objective-C的指针*作为变量加上去了(这个也够搞笑,希望Sharpie下个版本能修正),都要删除掉*就解决了

  1. // -(void)renderLinesWithPoints:(CGPoint *)points pointCount:(NSUInteger)pointCount strokeColor:(UIColor *)strokeColor lineWidth:(CGFloat)lineWidth looped:(BOOL)looped LineJoinType:(MALineJoinType)lineJoinType LineCapType:(MALineCapType)lineCapType lineDash:(BOOL)lineDash;

  2. [Export("renderLinesWithPoints:pointCount:strokeColor:lineWidth:looped:LineJoinType:LineCapType:lineDash:")]

  3. unsafe void RenderLinesWithPoints(CGPoint* points, nuint pointCount, UIColor strokeColor, nfloat lineWidth, bool looped, MALineJoinType lineJoinType, MALineCapType lineCapType, bool lineDash);

还是Verify字段要去掉


       这里有一个更好玩的事,就是扩展方法这里转换老提示以下错误

我查看了一下,发现是怎么也不认扩展方法,看了看stackoverflow ,发现需要把每个属性的get/set通过方法描述解决,这也是醉了。。。。。如这个

  1. [Export("allowsAnnotationViewSorting")]

  2. bool AllowsAnnotationViewSorting { get; set; }

需要修正为:

  1. [Export("allowsAnnotationViewSorting")]

  2. //bool AllowsAnnotationViewSorting { get; set; }

  3. bool AllowsAnnotationViewSorting();

  4. [Export("setAllowsAnnotationViewSorting:")]

  5. void SetAllowsAnnotationViewSorting(bool allowsAnnotationViewSorting);

按照上述步骤基本上就可以把项目编译成功了。

3.接下来就是添加一个iOS项目,做一个简单测试。

这里需要补充一下,需要对MAMapKit.framework补充关联

在Info.plist中 Location Always Usage Description

还需要把两个绑定Binding引用进去

还需要把AMap资源引用去Resource目录(bundle在MAMapKit.framework内)

最后只需要在ViewController.cs添加如下代码就可以了

  1. AMapServices.SharedServices.ApiKey = "你申请的key";

  2. AMapServices.SharedServices.EnableHTTPS = true;

  3. MAMapView map = new MAMapView();

  4. map.Frame = this.View.Bounds;

  5. map.SetShowsUserLocation(true);

  6. map.SetUserTrackingMode(MAUserTrackingMode.Follow);

  7. this.View.AddSubview(map);

Rebuild一下运行

   

爽爽!!

代码在github上 https://github.com/lokinfey/AMapSDK,由于时间有限我只会暂时先放一个简单的定位功能上去。给有缘人自己添加功能了。

相关文章:

  • Xamarin的坑 - 绑定(一) - 拿微信iOS SDK 简单说起

原文地址:http://blog.csdn.net/kinfey/article/details/56303998


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

赞赏

人赞赏

Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事相关推荐

  1. 《模拟飞行入坑(二)P3D SDK环境搭建及CHM文件转化为html》

    SDK包下载 官网下载地址及文档:https://www.prepar3d.com/support/sdk/ 因为游戏使用的是P3DV4.2的版本,所以SDK优先选择 Prepar3D_v4_SDK_ ...

  2. iOS一次定位解决方案(基于高德iOS SDK)

    部分LBS应用,在打开app时获取当前的准确位置就能满足要求,一直开着定位,不仅会浪费流量也费电,所以这里给大家推荐一个一次定位的解决方法. 步骤如下: 1.开启定位,请求获取位置信息.(注意:iOS ...

  3. ASP.NET MVC Model绑定(二)

    ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程 ...

  4. Xamarin的坑 - 绑定(一) - 拿微信iOS SDK 简单说起

    编者语:Xamarin 并入微软快一年了,在国内推广还是慢,主要有两个方面,Xamarin在国内的本地化不足真正在国内的解决方案基本上没有,第二就是和本土的一些主要SDK接入案例基本上也没有.上述原因 ...

  5. flutter引入高德地图_Flutter笔记-调用原生IOS高德地图sdk

    一.前言 2017年底因公司业务组合部门调整,新的团队部分维护的项目用React Native技术混合开发.为适应环境变化,开启疯狂RN学习之旅,晚上回来啃资料看视频.可能由于本身对RN技术体验不感冒 ...

  6. [iOS]高德地图SDK开发--准备篇

    本文是对高德地图SDK使用的总结,对于高德地图不做过多介绍,可直接登录其官网开放平台进行了解; PS: 这里主要是讲解地图使用的准备工作,最后,以显示地图并定位到当前位置来验证;对于其他的使用,可参看 ...

  7. 【iOS】—— 高德地图SDK基础使用

    最近稍微学了学iOS调用高德的SDK,就随便做做笔记.注意:本篇博客基于高德地图SDK的3D地图来写的,若使用的是2D地图可能有的方法可能有所不同,比如自定义定位蓝点之类的. 一.准备工作: 具体的准 ...

  8. Xamarin.iOS调试提示需要iOS SDK

    Xamarin.iOS调试提示需要iOS SDK 错误信息:The version of Xamarin.iOS requires th iOS 9.3 SDK (shipped with Xcode ...

  9. iOS调用高德地图SDK

    准备工作: 安装CocoaPods 使用下载第三方库相同的方法下载SDK 方法如下: (1)打开终端,cd 文件路径 进入到所创建的项目文件中 (2)输入pod init为该项目创建Podfile文件 ...

最新文章

  1. 理解Lucene索引与搜索过程中的核心类
  2. 04 Java面试题之数组
  3. django 模板语言之 simple_tag 自定义模板
  4. vue中webpack默认配置_Vue-cli 中 Webpack 配置优化(一)
  5. [Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效
  6. asp服务器组件安装包,ASP服务器组件
  7. k8s核心技术-Helm引入---K8S_Google工作笔记0043
  8. 易天ETU-link 100G QSFP28光模块系列资料
  9. 代号斗罗显示服务器暂未开放,代号斗罗手游
  10. 第三天:完善数据层(controller)真正对接数据库Mysql
  11. Git 及 GitHub实用教程
  12. java socket保活_gb28181简单实现sip信令服务器(java版基于springboot):四、sip摄像头心跳保活、推流(tcp/udp)和结束推流...
  13. hd计算机技术,BD和HD的区别是什么?
  14. 用python在大麦网抢票攻略_大麦网抢票有什么攻略?
  15. 利用uniapp实现手机摇一摇H5项目
  16. 收藏!一文搞定工作中Git的使用实践和常用命令合集
  17. 使用OpenCV和Python进行人脸识别
  18. 网站标题设置优化方法
  19. 亚马逊SP-API对接实践
  20. ppt精选111个毕业答辩模板

热门文章

  1. 配置 mybatis的 log4j.properties
  2. 手机自动化测试:appium源码分析之bootstrap七
  3. Python 学习笔记(三)Function
  4. SharePoint 常见问题
  5. WPF 实现音频播放动画控件
  6. 互联网巨头基于全球产业链打造ARM CPU
  7. 如何通过 C# 自动捕获一个文件的变更?
  8. 微软发布了Visual Studio 2022 RC版,并将在11月8日发布正式版
  9. WPF 制作便携小空调
  10. 您好,dotnet tool