- 创建行程

行程点的地图选择、搜索功能
	行程点的路线绘制
This commit is contained in:
linshujie 2026-06-24 18:42:14 +08:00
parent b7c96e6fc6
commit 47a02a9e07
45 changed files with 16710 additions and 12721 deletions

View File

@ -60,8 +60,9 @@ target 'QuickLocation' do
pod 'WechatOpenSDK-XCFramework' pod 'WechatOpenSDK-XCFramework'
#高德地图 #高德地图
pod 'AMapNavi-NO-IDFA' #导航SDK(含地图+搜索+导航) pod 'AMapNavi-NO-IDFA' #导航SDK
pod 'AMapLocation-NO-IDFA' #定位SDK pod 'AMapLocation-NO-IDFA' #定位SDK
pod 'AMapSearch-NO-IDFA' #搜索SDK
end end

View File

@ -6,6 +6,8 @@ PODS:
- AMapFoundation-NO-IDFA (>= 1.9.0) - AMapFoundation-NO-IDFA (>= 1.9.0)
- AMapNavi-NO-IDFA (11.2.000): - AMapNavi-NO-IDFA (11.2.000):
- AMapFoundation-NO-IDFA (>= 1.9.0) - AMapFoundation-NO-IDFA (>= 1.9.0)
- AMapSearch-NO-IDFA (9.8.0):
- AMapFoundation-NO-IDFA (>= 1.9.0)
- BRPickerView (3.0.0): - BRPickerView (3.0.0):
- BRPickerView/Default (= 3.0.0) - BRPickerView/Default (= 3.0.0)
- BRPickerView/Core (3.0.0) - BRPickerView/Core (3.0.0)
@ -188,6 +190,7 @@ DEPENDENCIES:
- AlipaySDK-iOS - AlipaySDK-iOS
- AMapLocation-NO-IDFA - AMapLocation-NO-IDFA
- AMapNavi-NO-IDFA - AMapNavi-NO-IDFA
- AMapSearch-NO-IDFA
- BRPickerView - BRPickerView
- CocoaLumberjack/Swift - CocoaLumberjack/Swift
- CocoaMQTT - CocoaMQTT
@ -231,6 +234,7 @@ SPEC REPOS:
- AMapFoundation-NO-IDFA - AMapFoundation-NO-IDFA
- AMapLocation-NO-IDFA - AMapLocation-NO-IDFA
- AMapNavi-NO-IDFA - AMapNavi-NO-IDFA
- AMapSearch-NO-IDFA
- BRPickerView - BRPickerView
- CocoaLumberjack - CocoaLumberjack
- CocoaMQTT - CocoaMQTT
@ -296,6 +300,7 @@ SPEC CHECKSUMS:
AMapFoundation-NO-IDFA: a2e3c895398d7ee757278e1a0a8f9359da4b146e AMapFoundation-NO-IDFA: a2e3c895398d7ee757278e1a0a8f9359da4b146e
AMapLocation-NO-IDFA: 7cd8fc837ea41edfbf4d937cd20572e277b77d18 AMapLocation-NO-IDFA: 7cd8fc837ea41edfbf4d937cd20572e277b77d18
AMapNavi-NO-IDFA: d55b9b138c6e540f737c689975cae2c9dbd1026a AMapNavi-NO-IDFA: d55b9b138c6e540f737c689975cae2c9dbd1026a
AMapSearch-NO-IDFA: c0afd2a69a076d4228becda4401dbe4a279a03ef
BRPickerView: cd2e0e3aa87af062bc7a1b6f78d3dfd5f04f04bb BRPickerView: cd2e0e3aa87af062bc7a1b6f78d3dfd5f04f04bb
CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6 CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6
CocoaMQTT: 1e2fa493d57045d66fb1eba2bb5ffb8d77039c60 CocoaMQTT: 1e2fa493d57045d66fb1eba2bb5ffb8d77039c60
@ -347,6 +352,6 @@ SPEC CHECKSUMS:
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117 ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117
PODFILE CHECKSUM: 848cd9ba02b2f1c209ac9eef708dd2c43b005385 PODFILE CHECKSUM: 55d478000a8bba48e7bb7de252ef246a0b3784c4
COCOAPODS: 1.16.2 COCOAPODS: 1.16.2

Binary file not shown.

View File

@ -0,0 +1,939 @@
//
// AMapCommonObj.h
// AMapSearchKit
//
// Created by xiaoming han on 15/7/22.
// Copyright (c) 2015年 Amap. All rights reserved.
//
/* 该文件定义了搜索结果的基础数据类型。*/
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#pragma mark - AMapSearchObject
///搜索SDK基础类, 通用数据结构和response支持copy和codingsince 4.4.1)。
@interface AMapSearchObject : NSObject<NSCopying, NSCoding>
/**
* @brief response类型有效
*/
- (NSString *)formattedDescription;
@end
#pragma mark - 通用数据结构
///经纬度, description中格式为 <经度,纬度>
@interface AMapGeoPoint : AMapSearchObject
///纬度(垂直方向)
@property (nonatomic, assign) CGFloat latitude;
///经度(水平方向)
@property (nonatomic, assign) CGFloat longitude;
/**
* @brief AMapGeoPoint对象
* @param lat
* @param lon
*/
+ (AMapGeoPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon;
@end
///多边形, 当传入两个点的时候,当做矩形处理:左下-右上两个顶点;其他情况视为多边形,几个点即为几边型。
@interface AMapGeoPolygon : AMapSearchObject
///坐标集, AMapGeoPoint 数组
@property (nonatomic, strong) NSArray<AMapGeoPoint *> *points;
/**
* @brief
* @param points , AMapGeoPoint
*/
+ (AMapGeoPolygon *)polygonWithPoints:(NSArray *)points;
@end
@class AMapDistrict;
///城市
@interface AMapCity : AMapSearchObject
///城市名称
@property (nonatomic, copy) NSString *city;
///城市编码
@property (nonatomic, copy) NSString *citycode;
///城市区域编码
@property (nonatomic, copy) NSString *adcode;
///此区域的建议结果数目, AMapSuggestion 中使用
@property (nonatomic, assign) NSInteger num;
///途径区域 AMapDistrict 数组AMepStep中使用只有name和adcode。
@property (nonatomic, strong) NSArray<AMapDistrict *> *districts;
@end
///建议信息
@interface AMapSuggestion : AMapSearchObject
///NSString 数组
@property (nonatomic, strong) NSArray<NSString *> *keywords;
///AMapCity 数组
@property (nonatomic, strong) NSArray<AMapCity *> *cities;
@end
#pragma mark - 输入提示
///输入提示
@interface AMapTip : AMapSearchObject
///poi的id
@property (nonatomic, copy) NSString *uid;
///名称
@property (nonatomic, copy) NSString *name;
///区域编码
@property (nonatomic, copy) NSString *adcode;
///所属区域
@property (nonatomic, copy) NSString *district;
///地址
@property (nonatomic, copy) NSString *address;
///位置
@property (nonatomic, copy) AMapGeoPoint *location;
///类型码, since 4.5.0. 对应描述可下载参考官网文档 http://a.amap.com/lbs/static/zip/AMap_API_Table.zip。
@property (nonatomic, copy) NSString *typecode;
@end
#pragma mark - POI
///POI图片信息
@interface AMapImage : AMapSearchObject
///标题
@property (nonatomic, copy) NSString *title;
///url
@property (nonatomic, copy) NSString *url;
@end
///POI扩展信息
@interface AMapPOIExtension : AMapSearchObject
///评分
@property (nonatomic, assign) CGFloat rating;
///人均消费
@property (nonatomic, assign) CGFloat cost;
///营业时间
@property (nonatomic, copy) NSString *openTime;
@end
///POI榜单信息 @since 9.7.0
@interface AMapTopListItem : AMapSearchObject
///榜单类型
@property (nonatomic, copy) NSString *type;
///榜单名称
@property (nonatomic, copy) NSString *name;
@end
///POI室内地图信息
@interface AMapIndoorData : AMapSearchObject
/// 是否有室内地图标志 1为有 0为没有 @since 9.4.0
@property (nonatomic, assign) NSInteger indoorMap;
///楼层索引一般会用数字表示例如8。indoorMap为0时不返回
@property (nonatomic, assign) NSInteger floor;
///所在楼层一般会带有字母例如F8。indoorMap为0时不返回
@property (nonatomic, copy) NSString *floorName;
///如果当前POI为建筑物类POI则cpid为自身POI ID如果当前POI为商铺类POI则cpid为其所在建筑物的POI ID。indoorMap为0时不返回
@property (nonatomic, copy) NSString *pid;
@end
///POI商圈信息 @since 9.4.0
@interface AMapBusinessData : AMapSearchObject
///POI所属商圈
@property (nonatomic, copy) NSString *businessArea;
///POI今日营业时间如 08:30-17:30 08:30-09:00 12:00-13:30 09:00-13:00
@property (nonatomic, copy) NSString *opentimeToday;
///POI营业时间描述如 周一至周五:08:30-17:30(延时服务时间:08:30-09:0012:00-13:30);周六延时服务时间:09:00-13:00(法定节假日除外)
@property (nonatomic, copy) NSString *opentimeWeek;
///POI的联系电话
@property (nonatomic, copy) NSString *tel;
///POI特色内容目前仅在美食POI下返回
@property (nonatomic, copy) NSString *tag;
///POI评分目前仅在餐饮、酒店、景点、影院类POI下返回
@property (nonatomic, copy) NSString *rating;
///POI人均消费目前仅在餐饮、酒店、景点、影院类POI下返回
@property (nonatomic, copy) NSString *cost;
///停车场类型地下、地面、路边目前仅在停车场类POI下返回
@property (nonatomic, copy) NSString *parkingType;
///POI的别名无别名时不返回
@property (nonatomic, copy) NSString *alias;
@end
///子POI
@interface AMapSubPOI : AMapSearchObject
///POI全局唯一ID
@property (nonatomic, copy) NSString *uid;
///名称
@property (nonatomic, copy) NSString *name;
///名称简写
@property (nonatomic, copy) NSString *sname;
///经纬度
@property (nonatomic, copy) AMapGeoPoint *location;
///地址
@property (nonatomic, copy) NSString *address;
///距中心点距离
@property (nonatomic, assign) NSInteger distance;
///子POI类型
@property (nonatomic, copy) NSString *subtype;
///子POI分类编码 @since 9.4.0
@property (nonatomic, copy) NSString *typeCode;
@end
///沿途POI
@interface AMapRoutePOI : AMapSearchObject
///POI全局唯一ID
@property (nonatomic, copy) NSString *uid;
///名称
@property (nonatomic, copy) NSString *name;
///经纬度
@property (nonatomic, copy) AMapGeoPoint *location;
///用户起点经过途经点再到终点的距离,单位是米
@property (nonatomic, assign) NSInteger distance;
///用户起点经过途经点再到终点的时间,单位为秒
@property (nonatomic, assign) NSInteger duration;
@end
///POI
@interface AMapPOI : AMapSearchObject
///POI全局唯一ID
@property (nonatomic, copy) NSString *uid;
///名称
@property (nonatomic, copy) NSString *name;
///兴趣点类型
@property (nonatomic, copy) NSString *type;
///类型编码
@property (nonatomic, copy) NSString *typecode;
///经纬度
@property (nonatomic, copy) AMapGeoPoint *location;
///地址
@property (nonatomic, copy) NSString *address;
///电话
@property (nonatomic, copy) NSString *tel;
///距中心点的距离,单位米。在周边搜索时有效
@property (nonatomic, assign) CGFloat distance;
///停车场类型,地上、地下、路边
@property (nonatomic, copy) NSString *parkingType;
///商铺id
@property (nonatomic, copy) NSString *shopID;
///邮编
@property (nonatomic, copy) NSString *postcode;
///网址
@property (nonatomic, copy) NSString *website;
///电子邮件
@property (nonatomic, copy) NSString *email;
///省
@property (nonatomic, copy) NSString *province;
///省编码
@property (nonatomic, copy) NSString *pcode;
///城市名称
@property (nonatomic, copy) NSString *city;
///城市编码
@property (nonatomic, copy) NSString *citycode;
///区域名称
@property (nonatomic, copy) NSString *district;
///区域编码
@property (nonatomic, copy) NSString *adcode;
///POI对应的导航引导点坐标 @since 9.4.0
@property (nonatomic, copy) NSString *naviPOIId;
///地理格ID
@property (nonatomic, copy) NSString *gridcode;
///入口经纬度
@property (nonatomic, copy) AMapGeoPoint *enterLocation;
///出口经纬度
@property (nonatomic, copy) AMapGeoPoint *exitLocation;
///方向
@property (nonatomic, copy) NSString *direction;
///是否有室内地图
@property (nonatomic, assign) BOOL hasIndoorMap;
///所在商圈
@property (nonatomic, copy) NSString *businessArea;
///室内信息
@property (nonatomic, strong) AMapIndoorData *indoorData;
///子POI列表
@property (nonatomic, strong) NSArray<AMapSubPOI *> *subPOIs;
///图片列表
@property (nonatomic, strong) NSArray<AMapImage *> *images;
///所在商圈 @since 9.4.0
@property (nonatomic, strong) AMapBusinessData *businessData;
///扩展信息只有在ID查询时有效
@property (nonatomic, strong) AMapPOIExtension *extensionInfo;
@end
#pragma mark - 逆地理编码 && 地理编码
///兴趣区域
@interface AMapAOI : AMapSearchObject
///AOI全局唯一ID
@property (nonatomic, copy) NSString *uid;
///名称
@property (nonatomic, copy) NSString *name;
///所在区域编码
@property (nonatomic, copy) NSString *adcode;
///中心点经纬度
@property (nonatomic, copy) AMapGeoPoint *location;
///面积,单位平方米
@property (nonatomic, assign) CGFloat area;
///输入经纬度是否在 aoi 面之中0代表在 aoi 内 其余整数代表距离 AOI 的距离 @since V9.7.4
@property (nonatomic, assign) CGFloat distance;
///所属 aoi 类型 @since V9.7.4
@property (nonatomic, copy) NSString *type;
@end
///道路
@interface AMapRoad : AMapSearchObject
///道路ID
@property (nonatomic, copy) NSString *uid;
///道路名称
@property (nonatomic, copy) NSString *name;
///距离(单位:米)
@property (nonatomic, assign) NSInteger distance;
///方向
@property (nonatomic, copy) NSString *direction;
///坐标点
@property (nonatomic, copy) AMapGeoPoint *location;
@end
///道路交叉口
@interface AMapRoadInter : AMapSearchObject
///距离(单位:米)
@property (nonatomic, assign) NSInteger distance;
///方向
@property (nonatomic, copy) NSString *direction;
///经纬度
@property (nonatomic, copy) AMapGeoPoint *location;
///第一条道路ID
@property (nonatomic, copy) NSString *firstId;
///第一条道路名称
@property (nonatomic, copy) NSString *firstName;
///第二条道路ID
@property (nonatomic, copy) NSString *secondId;
///第二条道路名称
@property (nonatomic, copy) NSString *secondName;
@end
///门牌信息
@interface AMapStreetNumber : AMapSearchObject
///街道名称
@property (nonatomic, copy) NSString *street;
///门牌号
@property (nonatomic, copy) NSString *number;
///坐标点
@property (nonatomic, copy) AMapGeoPoint *location;
///距离(单位:米)
@property (nonatomic, assign) NSInteger distance;
///方向
@property (nonatomic, copy) NSString *direction;
@end
///商圈
@interface AMapBusinessArea : AMapSearchObject
///名称
@property (nonatomic, strong) NSString *name;
///中心坐标
@property (nonatomic, copy) AMapGeoPoint *location;
@end
///地址组成要素
@interface AMapAddressComponent : AMapSearchObject
///国家since 5.7.0
@property (nonatomic, copy) NSString *country;
///国家简码since 7.4.0)仅海外生效
@property (nonatomic, copy) NSString *countryCode;
///省/直辖市
@property (nonatomic, copy) NSString *province;
///市
@property (nonatomic, copy) NSString *city;
///城市编码
@property (nonatomic, copy) NSString *citycode;
///区
@property (nonatomic, copy) NSString *district;
///区域编码
@property (nonatomic, copy) NSString *adcode;
///乡镇街道
@property (nonatomic, copy) NSString *township;
///乡镇街道编码
@property (nonatomic, copy) NSString *towncode;
///社区
@property (nonatomic, copy) NSString *neighborhood;
///建筑
@property (nonatomic, copy) NSString *building;
///门牌信息
@property (nonatomic, strong) AMapStreetNumber *streetNumber;
///商圈列表 AMapBusinessArea 数组
@property (nonatomic, strong) NSArray<AMapBusinessArea *> *businessAreas;
@end
///逆地理编码
@interface AMapReGeocode : AMapSearchObject
///格式化地址
@property (nonatomic, copy) NSString *formattedAddress;
///地址组成要素
@property (nonatomic, strong) AMapAddressComponent *addressComponent;
///道路信息 AMapRoad 数组
@property (nonatomic, strong) NSArray<AMapRoad *> *roads;
///道路路口信息 AMapRoadInter 数组
@property (nonatomic, strong) NSArray<AMapRoadInter *> *roadinters;
///兴趣点信息 AMapPOI 数组
@property (nonatomic, strong) NSArray<AMapPOI *> *pois;
///兴趣区域信息 AMapAOI 数组
@property (nonatomic, strong) NSArray<AMapAOI *> *aois;
@end
///地理编码
@interface AMapGeocode : AMapSearchObject
///格式化地址
@property (nonatomic, copy) NSString *formattedAddress;
///所在省/直辖市
@property (nonatomic, copy) NSString *province;
///城市名
@property (nonatomic, copy) NSString *city;
///城市编码
@property (nonatomic, copy) NSString *citycode;
///区域名称
@property (nonatomic, copy) NSString *district;
///区域编码
@property (nonatomic, copy) NSString *adcode;
///乡镇街道
@property (nonatomic, copy) NSString *township;
///社区
@property (nonatomic, copy) NSString *neighborhood;
///楼
@property (nonatomic, copy) NSString *building;
///坐标点
@property (nonatomic, copy) AMapGeoPoint *location;
///匹配的等级
@property (nonatomic, copy) NSString *level;
///国家since 7.4.0)仅海外生效
@property (nonatomic, copy) NSString *country;
///国家简码since 7.4.0)仅海外生效
@property (nonatomic, copy) NSString *postcode;
@end
#pragma mark - 公交查询
@class AMapBusLine;
///公交站
@interface AMapBusStop : AMapSearchObject
///公交站点ID
@property (nonatomic, copy) NSString *uid;
///区域编码
@property (nonatomic, copy) NSString *adcode;
///公交站名
@property (nonatomic, copy) NSString *name;
///城市编码
@property (nonatomic, copy) NSString *citycode;
///经纬度坐标
@property (nonatomic, copy) AMapGeoPoint *location;
///途径此站的公交路线 AMapBusLine 数组
@property (nonatomic, strong) NSArray<AMapBusLine *> *buslines;
///查询公交线路时的第几站
@property (nonatomic, copy) NSString *sequence;
@end
///公交线路
@interface AMapBusLine : AMapSearchObject
///公交线路ID
@property (nonatomic, copy) NSString *uid;
///公交类型
@property (nonatomic, copy) NSString *type;
///公交线路名称
@property (nonatomic, copy) NSString *name;
///坐标集合
@property (nonatomic, copy) NSString *polyline;
///城市编码
@property (nonatomic, copy) NSString *citycode;
///首发站
@property (nonatomic, copy) NSString *startStop;
///终点站
@property (nonatomic, copy) NSString *endStop;
///当查询公交站点时,返回的 AMapBusLine 中含有该字段
@property (nonatomic, copy) AMapGeoPoint *location;
///首班车时间
@property (nonatomic, copy) NSString *startTime;
///末班车时间
@property (nonatomic, copy) NSString *endTime;
///所属公交公司
@property (nonatomic, copy) NSString *company;
///距离。在公交线路查询时,该值为此线路的全程距离,单位为千米; 在公交路径规划时,该值为乘坐此路公交车的行驶距离,单位为米
@property (nonatomic, assign) CGFloat distance;
///起步价
@property (nonatomic, assign) CGFloat basicPrice;
///全程票价
@property (nonatomic, assign) CGFloat totalPrice;
///矩形区域左下、右上顶点坐标
@property (nonatomic, copy) AMapGeoPolygon *bounds;
///本线路公交站 AMapBusStop 数组
@property (nonatomic, strong) NSArray<AMapBusStop *> *busStops;
///起程站
@property (nonatomic, strong) AMapBusStop *departureStop;
///下车站
@property (nonatomic, strong) AMapBusStop *arrivalStop;
///途径公交站 AMapBusStop 数组
@property (nonatomic, strong) NSArray<AMapBusStop *> *viaBusStops;
///预计行驶时间(单位:秒)
@property (nonatomic, assign) NSInteger duration;
///此段途径公交站数
@property (nonatomic, assign) NSInteger viaNum;
@end
#pragma mark - 行政区划
///行政区划
@interface AMapDistrict : AMapSearchObject
///区域编码
@property (nonatomic, copy) NSString *adcode;
///城市编码
@property (nonatomic, copy) NSString *citycode;
///行政区名称
@property (nonatomic, copy) NSString *name;
///级别
@property (nonatomic, copy) NSString *level;
///城市中心点
@property (nonatomic, copy) AMapGeoPoint *center;
///下级行政区域数组
@property (nonatomic, strong) NSArray<AMapDistrict *> *districts;
///行政区边界坐标点, NSString 数组
@property (nonatomic, strong) NSArray<NSString *> *polylines;
@end
#pragma mark - 路径规划
///公交方案详细导航动作指令
@interface AMapTransitNavi : AMapSearchObject
///导航主要动作指令
@property (nonatomic, copy) NSString *action;
///导航辅助动作指令
@property (nonatomic, copy) NSString *assistantAction;
///算路结果中存在的道路类型:
/*
*0 1 3 4
*5 6 7广 8 9
*10 11 12穿
*13 14线 15线 16
*18 19线 20 21
*22 23 30
*/
@property (nonatomic, copy) NSString *walkType;
@end
///实时路况信息
@interface AMapTMC : AMapSearchObject
///长度(单位:米)
@property (nonatomic, assign) NSInteger distance;
///路况状态描述0 未知1 畅通2 缓行3 拥堵4 严重拥堵
@property (nonatomic, copy) NSString *status;
///此路段坐标点串
@property (nonatomic, copy) NSString *polyline;
@end
///路段基本信息
@interface AMapStep : AMapSearchObject
///行走指示
@property (nonatomic, copy) NSString *instruction;
///方向
@property (nonatomic, copy) NSString *orientation;
///道路名称
@property (nonatomic, copy) NSString *road;
///此路段长度(单位:米)
@property (nonatomic, assign) NSInteger distance;
///此路段预计耗时(单位:秒)
@property (nonatomic, assign) NSInteger duration;
///此路段坐标点串
@property (nonatomic, copy) NSString *polyline;
///导航主要动作
@property (nonatomic, copy) NSString *action;
///导航辅助动作
@property (nonatomic, copy) NSString *assistantAction;
///道路类型
@property (nonatomic, assign) NSInteger walkType;
///此段收费(单位:元)
@property (nonatomic, assign) CGFloat tolls;
///收费路段长度(单位:米)
@property (nonatomic, assign) NSInteger tollDistance;
///主要收费路段
@property (nonatomic, copy) NSString *tollRoad;
///此段交通信号灯个数 since 9.2.0 ( 只在算路2.0接口有效 )
@property (nonatomic, assign) NSInteger totalTrafficLights;
///途径城市 AMapCity 数组,只有驾车路径规划时有效
@property (nonatomic, strong) NSArray<AMapCity *> *cities;
///路况信息数组,只有驾车路径规划时有效
@property (nonatomic, strong) NSArray<AMapTMC *> *tmcs;
@end
///步行、骑行、驾车方案
@interface AMapPath : AMapSearchObject
///起点和终点的距离
@property (nonatomic, assign) NSInteger distance;
///预计耗时(单位:秒)
@property (nonatomic, assign) NSInteger duration;
///导航策略
@property (nonatomic, copy) NSString *strategy;
///导航路段 AMapStep 数组
@property (nonatomic, strong) NSArray<AMapStep *> *steps;
///此方案费用(单位:元)
@property (nonatomic, assign) CGFloat tolls;
///此方案收费路段长度(单位:米)
@property (nonatomic, assign) NSInteger tollDistance;
///此方案交通信号灯个数
@property (nonatomic, assign) NSInteger totalTrafficLights;
/**
since 6.0.0
0 ; 1
0/
1
2
3
4
5
*/
@property (nonatomic, assign) NSInteger restriction;
///规划路径完整坐标点串集合since 7.4.0
@property (nonatomic, copy) NSString *polyline;
@end
@interface AMapFutureTimeInfoElement : AMapSearchObject
///总时长(分钟)
@property (nonatomic, assign) NSInteger duration;
///对应的路径规划方案中的路线
@property (nonatomic, assign) NSInteger pathindex;
/**
0线
1线
*/
@property (nonatomic, assign) NSInteger restriction;
///路况信息数组只会返回AMapTMC中的status、polyline
@property (nonatomic, strong) NSArray<AMapTMC *> *tmcs;
@end
@interface AMapFutureTimeInfo : AMapSearchObject
///出发时间
@property (nonatomic, copy) NSString *startTime;
///路线列表 AMapFutureTimeInfoElement 数组
@property (nonatomic, strong) NSArray<AMapFutureTimeInfoElement *> *elements;
@end
///步行换乘信息
@interface AMapWalking : AMapSearchObject
///起点坐标
@property (nonatomic, copy) AMapGeoPoint *origin;
///终点坐标
@property (nonatomic, copy) AMapGeoPoint *destination;
///起点和终点的步行距离
@property (nonatomic, assign) NSInteger distance;
///步行预计时间
@property (nonatomic, assign) NSInteger duration;
///步行路段 AMapStep 数组
@property (nonatomic, strong) NSArray<AMapStep *> *steps;
@end
///出租车信息
@interface AMapTaxi : AMapSearchObject
///起点坐标
@property (nonatomic, copy) AMapGeoPoint *origin;
///终点坐标
@property (nonatomic, copy) AMapGeoPoint *destination;
///距离,单位米
@property (nonatomic, assign) NSInteger distance;
///耗时,单位秒
@property (nonatomic, assign) NSInteger duration;
///起点名称
@property (nonatomic, copy) NSString *sname;
///终点名称
@property (nonatomic, copy) NSString *tname;
///打车预计花费金额 @singce 9.4.0
@property (nonatomic, copy) NSString *price;
///线路点集合通过show_fields控制返回与否 @singce 9.4.0
@property (nonatomic, copy) NSString *polyline;
@end
///火车站
@interface AMapRailwayStation : AMapSearchObject
///火车站ID
@property (nonatomic, copy) NSString *uid;
///名称
@property (nonatomic, copy) NSString *name;
///经纬度坐标
@property (nonatomic, copy) AMapGeoPoint *location;
///区域编码
@property (nonatomic, copy) NSString *adcode;
///发车、到站时间,途径站时则为进站时间
@property (nonatomic, copy) NSString *time;
///途径站点的停靠时间,单位为分钟
@property (nonatomic, assign) NSInteger wait;
///是否是始发站,为出发站时有效
@property (nonatomic, assign) BOOL isStart;
///是否是终点站,为到达站时有效
@property (nonatomic, assign) BOOL isEnd;
@end
///火车仓位及价格信息
@interface AMapRailwaySpace : AMapSearchObject
///类型,硬卧、硬座等
@property (nonatomic, copy) NSString *code;
///票价,单位元
@property (nonatomic, assign) CGFloat cost;
@end
///火车信息
@interface AMapRailway : AMapSearchObject
///火车线路ID
@property (nonatomic, copy) NSString *uid;
///名称
@property (nonatomic, copy) NSString *name;
///车次
@property (nonatomic, copy) NSString *trip;
///类型
@property (nonatomic, copy) NSString *type;
///该换乘段行车总距离,单位为米
@property (nonatomic, assign) NSInteger distance;
///该线路车段耗时,单位为秒
@property (nonatomic, assign) NSInteger time;
///出发站
@property (nonatomic, strong) AMapRailwayStation *departureStation;
///到达站
@property (nonatomic, strong) AMapRailwayStation *arrivalStation;
///仓位及价格信息
@property (nonatomic, strong) NSArray<AMapRailwaySpace *> *spaces;
///途径站点信息
@property (nonatomic, strong) NSArray<AMapRailwayStation *> *viaStops;
///备选路线信息, 目前只有id和name
@property (nonatomic, strong) NSArray<AMapRailway *> *alters;
@end
///公交换乘路段如果walking和buslines同时有值则是先walking后buslines
@interface AMapSegment : AMapSearchObject
///此路段步行导航信息
@property (nonatomic, strong) AMapWalking *walking;
///此路段可供选择的不同公交线路 AMapBusLine 数组
@property (nonatomic, strong) NSArray<AMapBusLine *> *buslines;
///出租车信息,跨城时有效
@property (nonatomic, strong) AMapTaxi *taxi;
///火车信息,跨城时有效
@property (nonatomic, strong) AMapRailway *railway;
///入口名称
@property (nonatomic, copy) NSString *enterName;
///入口经纬度
@property (nonatomic, copy) AMapGeoPoint *enterLocation;
///出口名称
@property (nonatomic, copy) NSString *exitName;
///出口经纬度
@property (nonatomic, copy) AMapGeoPoint *exitLocation;
@end
///公交方案
@interface AMapTransit : AMapSearchObject
///此公交方案价格(单位:元)
@property (nonatomic, assign) CGFloat cost;
///此换乘方案预期时间(单位:秒)
@property (nonatomic, assign) NSInteger duration;
///是否是夜班车
@property (nonatomic, assign) BOOL nightflag;
///此方案总步行距离(单位:米)
@property (nonatomic, assign) NSInteger walkingDistance;
///换乘路段 AMapSegment 数组
@property (nonatomic, strong) NSArray<AMapSegment *> *segments;
///当前方案的总距离
@property (nonatomic, assign) NSInteger distance;
@end
///路径规划信息
@interface AMapRoute : AMapSearchObject
///起点坐标
@property (nonatomic, copy) AMapGeoPoint *origin;
///终点坐标
@property (nonatomic, copy) AMapGeoPoint *destination;
///出租车费用(单位:元)
@property (nonatomic, assign) CGFloat taxiCost;
///步行、骑行、驾车方案列表 AMapPath 数组
@property (nonatomic, strong) NSArray<AMapPath *> *paths;
///公交换乘方案列表 AMapTransit 数组
@property (nonatomic, strong) NSArray<AMapTransit *> *transits;
///详细导航动作指令 since 9.4.0
@property (nonatomic, strong) AMapTransitNavi *transitNavi;
///分路段坐标点串,两点间用“,”分隔 since 9.4.0
@property (nonatomic, copy) NSString *polyline;
/// 起点和终点总距离
@property (nonatomic, assign) CGFloat distance;
@end
///距离测量结果
@interface AMapDistanceResult : AMapSearchObject
///起点坐标,起点坐标序列号(从1开始)
@property (nonatomic, assign) NSInteger originID;
///终点坐标,终点坐标序列号(从1开始)
@property (nonatomic, assign) NSInteger destID;
///路径距离,单位:米
@property (nonatomic, assign) NSInteger distance;
///预计行驶时间,单位:秒
@property (nonatomic, assign) NSInteger duration;
///错误信息,建议用此字段判断请求是否成功
@property (nonatomic, copy) NSString *info;
///在驾车模式下有效。默认为01指定地点之间没有可以行车的道路2起点/终点 距离所有道路均距离过远(例如在海洋/矿业3起点/终点不在中国境内;
@property (nonatomic, assign) NSInteger code;
@end
#pragma mark - 天气查询
///实况天气,仅支持中国部分地区数据(台湾省目前没有数据)返回
@interface AMapLocalWeatherLive : AMapSearchObject
///区域编码
@property (nonatomic, copy) NSString *adcode;
///省份名
@property (nonatomic, copy) NSString *province;
///城市名
@property (nonatomic, copy) NSString *city;
///天气现象
@property (nonatomic, copy) NSString *weather;
///实时温度
@property (nonatomic, copy) NSString *temperature;
///风向
@property (nonatomic, copy) NSString *windDirection;
///风力,单位:级
@property (nonatomic, copy) NSString *windPower;
///空气湿度
@property (nonatomic, copy) NSString *humidity;
///数据发布时间
@property (nonatomic, copy) NSString *reportTime;
@end
///某一天的天气预报信息
@interface AMapLocalDayWeatherForecast : AMapSearchObject
///日期
@property (nonatomic, copy) NSString *date;
///星期
@property (nonatomic, copy) NSString *week;
///白天天气现象
@property (nonatomic, copy) NSString *dayWeather;
///晚上天气现象
@property (nonatomic, copy) NSString *nightWeather;
///白天温度
@property (nonatomic, copy) NSString *dayTemp;
///晚上温度
@property (nonatomic, copy) NSString *nightTemp;
///白天风向
@property (nonatomic, copy) NSString *dayWind;
///晚上风向
@property (nonatomic, copy) NSString *nightWind;
///白天风力
@property (nonatomic, copy) NSString *dayPower;
///晚上风力
@property (nonatomic, copy) NSString *nightPower;
@end
///天气预报类支持当前时间在内的3天的天气进行预报
@interface AMapLocalWeatherForecast : AMapSearchObject
///区域编码
@property (nonatomic, copy) NSString *adcode;
///省份名
@property (nonatomic, copy) NSString *province;
///城市名
@property (nonatomic, copy) NSString *city;
///数据发布时间
@property (nonatomic, copy) NSString *reportTime;
///天气预报AMapLocalDayWeatherForecast数组
@property (nonatomic, strong) NSArray<AMapLocalDayWeatherForecast *> *casts;
@end
#pragma mark - 附近搜索
///附近搜索返回的用户信息
@interface AMapNearbyUserInfo : AMapSearchObject
///用户ID
@property (nonatomic, copy) NSString *userID;
///最后更新位置
@property (nonatomic, copy) AMapGeoPoint *location;
///与搜索点的距离由搜索时searchType决定
@property (nonatomic, assign) CGFloat distance;
///最后更新的时间戳,单位秒
@property (nonatomic, assign) NSTimeInterval updatetime;
@end
#pragma mark - 交通态势
///道路路况评价 since 5.1.0
@interface AMapTrafficEvaluation : AMapSearchObject
///综述
@property (nonatomic, copy) NSString *evaluationDescription;
///0未知;1畅通;2缓行;3拥堵
@property (nonatomic, assign) NSInteger status;
///畅通所占百分比
@property (nonatomic, copy) NSString *expedite;
///缓行所占百分比
@property (nonatomic, copy) NSString *congested;
///拥堵所占百分比
@property (nonatomic, copy) NSString *blocked;
///未知路段所占百分比
@property (nonatomic, copy) NSString *unknown;
@end
///道路路况返回的道路信息 since 5.1.0
@interface AMapTrafficRoad : AMapSearchObject
///道路名称
@property (nonatomic, copy) NSString *name;
///0未知;1畅通;2缓行;3拥堵
@property (nonatomic, assign) NSInteger status;
///方向描述
@property (nonatomic, copy) NSString *direction;
///车行角度,判断道路正反向使用。 以正东方向为0度逆时针方向为正取值范围[0,360]
@property (nonatomic, assign) float angle;
///速度 单位:千米/小时
@property (nonatomic, assign) float speed;
///道路坐标集,经度和纬度使用","分隔,坐标之间使用";"分隔。例如x1,y1;x2,y2
@property (nonatomic, copy) NSString *polyline;
@end
///道路路况信息 since 5.1.0
@interface AMapTrafficInfo : AMapSearchObject
///路况综述
@property (nonatomic, copy) NSString *statusDescription;
///路况评价
@property (nonatomic, strong) AMapTrafficEvaluation *evaluation;
///道路信息
@property (nonatomic, strong) NSArray<AMapTrafficRoad*>* roads;
@end
#pragma mark - 企业地图基础数据类型
///POI点的图片信息
@interface AMapCloudImage : AMapSearchObject
///图片的id标识
@property (nonatomic, copy) NSString *uid;
///图片压缩后的url串
@property (nonatomic, copy) NSString *preurl;
///图片原始的url
@property (nonatomic, copy) NSString *url;
@end
///POI信息
@interface AMapCloudPOI : AMapSearchObject
///唯一标识
@property (nonatomic, assign) NSInteger uid;
///名称
@property (nonatomic, copy) NSString *name;
///坐标位置
@property (nonatomic, copy) AMapGeoPoint *location;
///地址
@property (nonatomic, copy) NSString *address;
///用户自定义字段
@property (nonatomic, strong) NSDictionary *customFields;
///创建时间
@property (nonatomic, copy) NSString *createTime;
///更新时间
@property (nonatomic, copy) NSString *updateTime;
///离当前位置的距离(只在企业地图周边搜索时有效)
@property (nonatomic, assign) NSInteger distance;
///图片信息
@property (nonatomic, strong) NSArray<AMapCloudImage *> *images __attribute((deprecated("已废弃 since 7.4.0")));
@end

View File

@ -0,0 +1,85 @@
//
// AMapNearbySearchManager.h
// AMapSearchKit
//
// Created by xiaoming han on 15/8/31.
// Copyright (c) 2015年 Amap. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AMapNearbyUploadInfo.h"
@class AMapNearbySearchManager;
///附近搜索代理
@protocol AMapNearbySearchManagerDelegate <NSObject>
@optional
/**
* @brief
*/
- (AMapNearbyUploadInfo *)nearbyInfoForUploading:(AMapNearbySearchManager *)manager;
/**
* @brief
* @param error
*/
- (void)onNearbyInfoUploadedWithError:(NSError *)error;
/**
* @brief
* @param error
*/
- (void)onUserInfoClearedWithError:(NSError *)error;
@end
///附近搜索管理类,同时只能有一个实例开启,否则可能会出现错误。
@interface AMapNearbySearchManager : NSObject
///上传最小间隔默认15s最小7s。自动上传的过程中设置无效。
@property (nonatomic, assign) NSTimeInterval uploadTimeInterval;
///代理对象。
@property (nonatomic, weak) id<AMapNearbySearchManagerDelegate> delegate;
///是否正在自动上传状态中。
@property (nonatomic, readonly) BOOL isAutoUploading;
/**
* @brief manager单例.
* key使.
* @return nearbySearch实例
*/
+ (instancetype)sharedInstance;
/**
* @brief 使
*/
- (instancetype)init __attribute__((unavailable));
/**
* @brief
*/
- (void)startAutoUploadNearbyInfo;
/**
* @brief
*/
- (void)stopAutoUploadNearbyInfo;
/**
* @brief uploadTimeInterval最小值
* @param info
* @return YESNO
*/
- (BOOL)uploadNearbyInfo:(AMapNearbyUploadInfo *)info __attribute((deprecated("已废弃 since 7.4.0,该功能不再支持")));
/**
* @brief
* @param userID ID
* @return YESNO
*/
- (BOOL)clearUserInfoWithID:(NSString *)userID __attribute((deprecated("已废弃 since 7.4.0,该功能不再支持")));
@end

View File

@ -0,0 +1,32 @@
//
// AMapNearbyUploadInfo.h
// AMapSearchKit
//
// Created by xiaoming han on 15/9/6.
// Copyright (c) 2015年 Amap. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
///上传经纬度类型
typedef NS_ENUM(NSInteger, AMapSearchCoordinateType)
{
AMapSearchCoordinateTypeGPS = 1, ///< 标准GPS坐标
AMapSearchCoordinateTypeAMap = 2, ///< 高德坐标
};
///附近搜索上传信息
@interface AMapNearbyUploadInfo : NSObject<NSCopying>
///用户唯一标识,不能为空,否则上传会失败. 长度不超过32字符只能包含英文、数字、下划线、短横杠
@property (nonatomic, copy) NSString *userID;
///坐标类型,默认是 AMapSearchCoordinateTypeAMap
@property (nonatomic, assign) AMapSearchCoordinateType coordinateType;
///用户位置经纬度。
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@end

View File

@ -0,0 +1,431 @@
//
// AMapSearchAPI.h
// AMapSearchKit
//
// Created by xiaoming han on 15/7/22.
// Copyright (c) 2015年 Amap. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "AMapSearchObjV1.h"
#import "AMapSearchObj.h"
#import "AMapCommonObj.h"
#import <AMapFoundationKit/AMapServices.h>
@protocol AMapSearchDelegate;
///搜索结果语言
#define AMapSearchLanguageZhCN @"zh-Hans" ///< 中文
#define AMapSearchLanguageEn @"en" ///< 英文
///搜索类
@interface AMapSearchAPI : NSObject
///实现了 AMapSearchDelegate 协议的类指针。
@property (nonatomic, weak) id<AMapSearchDelegate> delegate;
///查询超时时间单位秒默认为20秒。
@property (nonatomic, assign) NSInteger timeout;
// 注意:在使用地图功能前,请通过 [AMapServices sharedServices].regionLanguageType 来设置语言类型 (since 11.2.000)
///查询结果返回语言, 默认为中文。
//@property (nonatomic, copy) NSString *language;
///自定义参数
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *customParams;
/**
* @brief AMapSearch的初始化函数
* key使.
* @return AMapSearch类对象实例
*/
- (instancetype)init;
/**
* @brief
*/
- (void)cancelAllRequests;
#pragma mark - Privacy 隐私合规
/**
* @brief App是否显示隐私弹窗的状态SDK隐私协议内容的状态. since 8.1.0
* @param showStatus
* @param containStatus SDK隐私协议状态
*/
+ (void)updatePrivacyShow:(AMapPrivacyShowStatus)showStatus privacyInfo:(AMapPrivacyInfoStatus)containStatus;
/**
* @brief SDK隐私协议状态. since 8.1.0
* @param agreeStatus SDK隐私协议状态
*/
+ (void)updatePrivacyAgree:(AMapPrivacyAgreeStatus)agreeStatus;
#pragma mark - 搜索服务接口
/**
* @brief POI ID查询接口
* @param request AMapPOIIDSearchRequest
*/
- (void)AMapPOIIDSearch:(AMapPOIIDSearchRequest *)request;
/**
* @brief POI
* @param request AMapVisualSearchRequest
*/
- (void)AMapPOIPicVisualSearch:(AMapVisualSearchRequest *)request;
/**
* @brief POI
* @param request AMapPOIKeywordsSearchRequest
*/
- (void)AMapPOIKeywordsSearch:(AMapPOIKeywordsSearchRequest *)request;
/**
* @brief POI
* @param request AMapPOIAroundSearchRequest
*/
- (void)AMapPOIAroundSearch:(AMapPOIAroundSearchRequest *)request;
/**
* @brief POI
* @param request AMapPOIPolygonSearchRequest
*/
- (void)AMapPOIPolygonSearch:(AMapPOIPolygonSearchRequest *)request;
#pragma mark - 搜索服务接口V1API版本V3
/**
* @brief POI ID查询接口
* @param request AMapPOIIDSearchRequestV1
*/
- (void)AMapPOIIDSearchV1:(AMapPOIIDSearchRequestV1 *)request;
/**
* @brief POI
* @param request AMapPOIKeywordsSearchRequestV1
*/
- (void)AMapPOIKeywordsSearchV1:(AMapPOIKeywordsSearchRequestV1 *)request;
/**
* @brief POI
* @param request AMapPOIAroundSearchRequestV1
*/
- (void)AMapPOIAroundSearchV1:(AMapPOIAroundSearchRequestV1 *)request;
/**
* @brief POI
* @param request AMapPOIPolygonSearchRequestV1
*/
- (void)AMapPOIPolygonSearchV1:(AMapPOIPolygonSearchRequestV1 *)request;
/**
* @brief 沿 (v4.3.0)
* @param request AMapRoutePOISearchRequest
*/
- (void)AMapRoutePOISearch:(AMapRoutePOISearchRequest *)request;
/**
* @brief
* @param request AMapGeocodeSearchRequest
*/
- (void)AMapGeocodeSearch:(AMapGeocodeSearchRequest *)request;
/**
* @brief
* @param request AMapReGeocodeSearchRequest
*/
- (void)AMapReGoecodeSearch:(AMapReGeocodeSearchRequest *)request;
/**
* @brief
* @param request AMapInputTipsSearchRequest
*/
- (void)AMapInputTipsSearch:(AMapInputTipsSearchRequest *)request;
/**
* @brief
* @param request AMapBusStopSearchRequest
*/
- (void)AMapBusStopSearch:(AMapBusStopSearchRequest *)request;
/**
* @brief 线
* @param request AMapBusLineIDSearchRequest
*/
- (void)AMapBusLineIDSearch:(AMapBusLineIDSearchRequest *)request;
/**
* @brief 线
* @param request AMapBusLineNameSearchRequest
*/
- (void)AMapBusLineNameSearch:(AMapBusLineNameSearchRequest *)request;
/**
* @brief
* @param request AMapDistrictSearchRequest
*/
- (void)AMapDistrictSearch:(AMapDistrictSearchRequest *)request;
/**
* @brief 1.0
* @param request AMapDrivingRouteSearchRequest
*/
- (void)AMapDrivingRouteSearch:(AMapDrivingRouteSearchRequest *)request;
/**
* @brief V2.0
* @param request AMapDrivingCalRouteSearchRequest
*/
- (void)AMapDrivingV2RouteSearch:(AMapDrivingCalRouteSearchRequest *)request;
/**
* @brief
* @param request AMapWalkingRouteSearchRequest
*/
- (void)AMapWalkingRouteSearch:(AMapWalkingRouteSearchRequest *)request;
/**
* @brief
* @param request AMapTransitRouteSearchRequest
*/
- (void)AMapTransitRouteSearch:(AMapTransitRouteSearchRequest *)request;
/**
* @brief (since 4.3.0)
* @param request AMapRidingRouteSearchRequest
*/
- (void)AMapRidingRouteSearch:(AMapRidingRouteSearchRequest *)request;
/**
* @brief since 6.1.0
* @param request AMapTruckRouteSearchRequest
*/
- (void)AMapTruckRouteSearch:(AMapTruckRouteSearchRequest *)request;
/**
* @brief 线 since 6.9.0
* @param request AMapTruckRouteSearchRequest
*/
- (void)AMapFutureRouteSearch:(AMapFutureRouteSearchRequest *)request;
/**
* @brief
* @param request AMapWeatherSearchRequest
*/
- (void)AMapWeatherSearch:(AMapWeatherSearchRequest *)request;
/**
* @brief since 6.1.0
* @param request AMapDistanceSearchRequest
*/
- (void)AMapDistanceSearch:(AMapDistanceSearchRequest *)request;
- (void)AMapChargeStationSearch:(AMapChargeStationSearchRequest *)request;
#pragma mark - 附近搜索相关
/**
* @brief
* @param request AMapNearbySearchRequest
*/
- (void)AMapNearbySearch:(AMapNearbySearchRequest *)request __attribute__((deprecated("已废弃, from 7.4.0,该功能不再支持")));
#pragma mark - 企业地图搜索相关
/**
* @brief
* @param request AMapCloudPOIAroundSearchRequest
*/
- (void)AMapCloudPOIAroundSearch:(AMapCloudPOIAroundSearchRequest *)request;
/**
* @brief polygon区域查询接口
* @param request AMapCloudPOIPolygonSearchRequest
*/
- (void)AMapCloudPOIPolygonSearch:(AMapCloudPOIPolygonSearchRequest *)request;
/**
* @brief ID查询接口
* @param request AMapCloudPOIIDSearchRequest
*/
- (void)AMapCloudPOIIDSearch:(AMapCloudPOIIDSearchRequest *)request;
/**
* @brief
* @param request AMapCloudPOILocalSearchRequest
*/
- (void)AMapCloudPOILocalSearch:(AMapCloudPOILocalSearchRequest *)request;
#pragma mark - 短串分享相关
/**
* @brief
* @param request AMapLocationShareSearchRequest
*/
- (void)AMapLocationShareSearch:(AMapLocationShareSearchRequest *)request;
/**
* @brief
* @param request AMapPOIShareSearchRequest
*/
- (void)AMapPOIShareSearch:(AMapPOIShareSearchRequest *)request;
/**
* @brief 线
* @param request AMapRouteShareSearchRequest
*/
- (void)AMapRouteShareSearch:(AMapRouteShareSearchRequest *)request;
/**
* @brief
* @param request AMapNavigationShareSearchRequest
*/
- (void)AMapNavigationShareSearch:(AMapNavigationShareSearchRequest *)request;
@end
#pragma mark - AMapSearchDelegate
///AMapSearchDelegate协议, 定义了搜索结果的回调方法,发生错误时的错误回调方法。
@protocol AMapSearchDelegate<NSObject>
@optional
/**
* @brief .
* @param request .
* @param error .
*/
- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error;
/**
* @brief POI查询回调函数
* @param request AMapPOISearchBaseRequest
* @param response AMapPOISearchResponse
*/
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response;
/**
* @brief POI查询回调函数
* @param request AMapPOISearchBaseRequest
* @param response AMapPOISearchResponse
*/
- (void)onPOISearchDoneV1:(AMapPOISearchBaseRequestV1 *)request response:(AMapPOISearchResponseV1 *)response;
/**
* @brief
* @param request AMapVisualSearchRequest
* @param response AMapVisualSearchResponse
*/
- (void)onVisualSearchDone:(AMapVisualSearchRequest *)request response:(AMapVisualSearchResponse *)response;
/**
* @brief 沿 (since v4.3.0)
* @param request AMapRoutePOISearchRequest
* @param response AMapRoutePOISearchResponse
*/
- (void)onRoutePOISearchDone:(AMapRoutePOISearchRequest *)request response:(AMapRoutePOISearchResponse *)response;
/**
* @brief
* @param request AMapGeocodeSearchRequest
* @param response AMapGeocodeSearchResponse
*/
- (void)onGeocodeSearchDone:(AMapGeocodeSearchRequest *)request response:(AMapGeocodeSearchResponse *)response;
/**
* @brief
* @param request AMapReGeocodeSearchRequest
* @param response AMapReGeocodeSearchResponse
*/
- (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response;
/**
* @brief
* @param request AMapInputTipsSearchRequest
* @param response AMapInputTipsSearchResponse
*/
- (void)onInputTipsSearchDone:(AMapInputTipsSearchRequest *)request response:(AMapInputTipsSearchResponse *)response;
/**
* @brief
* @param request AMapBusStopSearchRequest
* @param response AMapBusStopSearchResponse
*/
- (void)onBusStopSearchDone:(AMapBusStopSearchRequest *)request response:(AMapBusStopSearchResponse *)response;
/**
* @brief 线
* @param request AMapBusLineSearchRequest
* @param response AMapBusLineSearchResponse
*/
- (void)onBusLineSearchDone:(AMapBusLineBaseSearchRequest *)request response:(AMapBusLineSearchResponse *)response;
/**
* @brief
* @param request AMapDistrictSearchRequest
* @param response AMapDistrictSearchResponse
*/
- (void)onDistrictSearchDone:(AMapDistrictSearchRequest *)request response:(AMapDistrictSearchResponse *)response;
/**
* @brief
* @param request AMapRouteSearchBaseRequest
* @param response AMapRouteSearchResponse
*/
- (void)onRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapRouteSearchResponse *)response;
/**
* @brief since 6.9.0
* @param request AMapRouteSearchBaseRequest
* @param response AMapRouteSearchResponse
*/
- (void)onFutureRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapFutureRouteSearchResponse *)response;
/**
* @brief
* @param request AMapDistanceSearchRequest
* @param response AMapDistanceSearchResponse
*/
- (void)onDistanceSearchDone:(AMapDistanceSearchRequest *)request response:(AMapDistanceSearchResponse *)response;
/**
* @brief
* @param request AMapWeatherSearchRequest
* @param response AMapWeatherSearchResponse
*/
- (void)onWeatherSearchDone:(AMapWeatherSearchRequest *)request response:(AMapWeatherSearchResponse *)response;
#pragma mark - 附近搜索回调
/**
* @brief
* @param request AMapNearbySearchRequest
* @param response AMapNearbySearchResponse
*/
- (void)onNearbySearchDone:(AMapNearbySearchRequest *)request response:(AMapNearbySearchResponse *)response;
#pragma mark - 企业地图搜索回调
/**
* @brief
* @param request AMapCloudSearchBaseRequest
* @param response AMapCloudPOISearchResponse
*/
- (void)onCloudSearchDone:(AMapCloudSearchBaseRequest *)request response:(AMapCloudPOISearchResponse *)response;
#pragma mark - 短串分享搜索回调
/**
* @brief
* @param request
* @param response AMapShareSearchResponse
*/
- (void)onShareSearchDone:(AMapShareSearchBaseRequest *)request response:(AMapShareSearchResponse *)response;
#pragma mark - 车机充电站搜索回调
/**
* @brief
* @param request
* @param response AMapShareSearchResponse
*/
- (void)onChargeStationSearchDone:(AMapChargeStationSearchRequest *)request response:(AMapChargeStationSearchResponse *)response;
@end

View File

@ -0,0 +1,80 @@
//
// AMapSearchError.h
// AMapSearchKit
//
// Created by xiaoming han on 15/7/29.
// Copyright (c) 2015年 Amap. All rights reserved.
//
#ifndef AMapSearchKit_AMapSearchError_h
#define AMapSearchKit_AMapSearchError_h
///AMapSearch errorDomain
extern NSString * const AMapSearchErrorDomain;
///注意增加errorCode时需增加code对应详细说明信息errorInfoWithCode
///AMapSearch errorCode
typedef NS_ENUM(NSInteger, AMapSearchErrorCode)
{
AMapSearchErrorOK = 1000,///< 没有错误
AMapSearchErrorInvalidSignature = 1001,///< 无效签名
AMapSearchErrorInvalidUserKey = 1002,///< key非法或过期
AMapSearchErrorServiceNotAvailable = 1003,///< 没有权限使用相应的接口
AMapSearchErrorDailyQueryOverLimit = 1004,///< 访问已超出日访问量
AMapSearchErrorTooFrequently = 1005,///< 用户访问过于频繁
AMapSearchErrorInvalidUserIP = 1006,///< 用户IP无效
AMapSearchErrorInvalidUserDomain = 1007,///< 用户域名无效
AMapSearchErrorInvalidUserSCode = 1008,///< 安全码验证错误bundleID与key不对应
AMapSearchErrorUserKeyNotMatch = 1009,///< 请求key与绑定平台不符
AMapSearchErrorIPQueryOverLimit = 1010,///< IP请求超限
AMapSearchErrorNotSupportHttps = 1011,///< 不支持HTTPS请求
AMapSearchErrorInsufficientPrivileges = 1012,///< 权限不足,服务请求被拒绝
AMapSearchErrorUserKeyRecycled = 1013,///< 开发者key被删除无法正常使用
AMapSearchErrorInvalidResponse = 1100,///< 请求服务响应错误
AMapSearchErrorInvalidEngineData = 1101,///< 引擎返回数据异常
AMapSearchErrorConnectTimeout = 1102,///< 服务端请求链接超时
AMapSearchErrorReturnTimeout = 1103,///< 读取服务结果超时
AMapSearchErrorInvalidParams = 1200,///< 请求参数非法
AMapSearchErrorMissingRequiredParams = 1201,///< 缺少必填参数
AMapSearchErrorIllegalRequest = 1202,///< 请求协议非法
AMapSearchErrorServiceUnknown = 1203,///< 其他服务端未知错误
AMapSearchErrorClientUnknown = 1800,///< 客户端未知错误,服务返回结果为空或其他错误
AMapSearchErrorInvalidProtocol = 1801,///< 协议解析错误,通常是返回结果无法解析
AMapSearchErrorTimeOut = 1802,///< 连接超时
AMapSearchErrorBadURL = 1803,///< URL异常
AMapSearchErrorCannotFindHost = 1804,///< 找不到主机
AMapSearchErrorCannotConnectToHost = 1805,///< 服务器连接失败
AMapSearchErrorNotConnectedToInternet = 1806,///< 连接异常,通常为没有网络的情况
AMapSearchErrorCancelled = 1807,///< 连接取消
AMapSearchErrorOverPassPointCount = 1809,///< 途经点个数超限
AMapSearchErrorOverPassAreaMaxCount = 1810,///< 避让区域个数超限
AMapSearchErrorOverPassAreaMaxArea = 1811,///< 避让区域大小超限
AMapSearchErrorOverPassAreaPointCount = 1812,///< 避让区域点个数超限
AMapSearchErrorOverPassKeyWordLenth = 1813,///< 搜索关键字长度超限
AMapSearchErrorTableIDNotExist = 2000,///< table id 格式不正确
AMapSearchErrorIDNotExist = 2001,///< id 不存在
AMapSearchErrorServiceMaintenance = 2002,///< 服务器维护中
AMapSearchErrorEngineTableIDNotExist = 2003,///< key对应的table id 不存在
AMapSearchErrorInvalidNearbyUserID = 2100,///< 找不到对应userID的信息
AMapSearchErrorNearbyKeyNotBind = 2101,///< key未开通“附近”功能
AMapSearchErrorOutOfService = 3000,///< 规划点(包括起点、终点、途经点)不在中国范围内
AMapSearchErrorNoRoadsNearby = 3001,///< 规划点(包括起点、终点、途经点)附近搜不到道路
AMapSearchErrorRouteFailed = 3002,///< 路线计算失败,通常是由于道路连通关系导致
AMapSearchErrorOverDirectionRange = 3003,///< 起点终点距离过长
AMapSearchErrorShareLicenseExpired = 4000,///< 短串分享认证失败
AMapSearchErrorShareFailed = 4001,///< 短串请求失败
};
@interface AMapSearchError : NSObject
///错误码所对应详细信息
+ (NSString *)errorInfoWithCode:(AMapSearchErrorCode)errorCode;
@end
#endif

View File

@ -0,0 +1,16 @@
//
// AMapSearchKit.h
// AMapSearchKit
//
// Created by xiaoming han on 15/7/22.
// Copyright (c) 2015年 Amap. All rights reserved.
//
#import <AMapSearchKit/AMapSearchAPI.h>
#import <AMapSearchKit/AMapSearchObj.h>
#import <AMapSearchKit/AMapCommonObj.h>
#import <AMapSearchKit/AMapSearchError.h>
#import <AMapSearchKit/AMapNearbySearchManager.h>
#import <AMapSearchKit/AMapNearbyUploadInfo.h>
#import <AMapSearchKit/AMapSearchVersion.h>

View File

@ -0,0 +1,912 @@
//
// AMapSearchObj.h
// AMapSearchKit
//
// Created by xiaoming han on 15/7/22.
// Copyright (c) 2015年 Amap. All rights reserved.
//
/* 该文件定义了搜索请求和返回对象。*/
#import <Foundation/Foundation.h>
#import "AMapCommonObj.h"
///沿途搜索类型
typedef NS_ENUM(NSInteger, AMapRoutePOISearchType)
{
AMapRoutePOISearchTypeGasStation = 0, ///< 加油站
AMapRoutePOISearchTypeMaintenanceStation = 1, ///< 维修站
AMapRoutePOISearchTypeATM = 2, ///< ATM
AMapRoutePOISearchTypeToilet = 3, ///< 厕所
AMapRoutePOISearchTypeGasAirStation = 4, ///< 加气站
AMapRoutePOISearchTypeParkStation = 5, ///< 服务区
AMapRoutePOISearchTypeChargingPile = 6, ///< 充电桩
AMapRoutePOISearchTypeFood = 7, ///< 美食
AMapRoutePOISearchTypeHotel = 8, ///< 酒店
};
///天气查询类型
typedef NS_ENUM(NSInteger, AMapWeatherType)
{
AMapWeatherTypeLive = 1, ///< 实时
AMapWeatherTypeForecast ///< 预报
};
///企业地图搜索结果排序
typedef NS_ENUM(NSInteger, AMapCloudSortType)
{
AMapCloudSortTypeDESC = 0, ///< 降序
AMapCloudSortTypeASC = 1 ///< 升序
};
///附近搜索距离类型
typedef NS_ENUM(NSInteger, AMapNearbySearchType)
{
AMapNearbySearchTypeLiner = 0, ///< 直线距离
AMapNearbySearchTypeDriving = 1, ///< 驾车行驶距离
};
///货车类型
typedef NS_ENUM(NSInteger, AMapTruckSizeType)
{
AMapTruckSizeTypeMini = 1, ///< 微型车
AMapTruckSizeTypeLight = 2, ///< 轻型车
AMapTruckSizeTypeMedium = 3, ///< 中型车
AMapTruckSizeTypeHeavy = 4, ///< 重型车
};
///规避道路类型
typedef NS_ENUM(NSInteger, AMapDrivingRouteExcludeType)
{
AMapDrivingRouteExcludeTypeNone = 0, ///< 不规避
AMapDrivingRouteExcludeTypeToll = 1, ///< 收费道路
AMapDrivingRouteExcludeTypeMotorway = 2, ///< 高速路
AMapDrivingRouteExcludeTypeFerry = 3, ///< 渡船
};
///规避道路类型 @since 9.2.0
typedef NS_OPTIONS(NSUInteger, AMapDrivingRouteShowFieldType)
{
AMapDrivingRouteShowFieldTypeNone = 1 << 0, ///< 不返回扩展信息
AMapDrivingRouteShowFieldTypeCost = 1 << 1, ///< 返回方案所需时间及费用成本
AMapDrivingRouteShowFieldTypeTmcs = 1 << 2, ///< 返回分段路况详情
AMapDrivingRouteShowFieldTypeNavi = 1 << 3, ///< 返回详细导航动作指令
AMapDrivingRouteShowFieldTypeCities = 1 << 4, ///< 返回分段途径城市信息
AMapDrivingRouteShowFieldTypePolyline = 1 << 5, ///< 返回分段路坐标点串,两点间用“,”分隔
AMapDrivingRouteShowFieldTypeNewEnergy = 1 << 6,///< 返回分段路坐标点串,两点间用“,”分隔
AMapDrivingRouteShowFieldTypeAll = ~0UL, ///< 返回所有扩展信息
};
///步行路线规划返回结果控制 @since 9.4.0
typedef NS_OPTIONS(NSUInteger, AMapWalkingRouteShowFieldType)
{
AMapWalkingRouteShowFieldTypeNone = 0 << 0, ///< 不返回扩展信息
AMapWalkingRouteShowFieldTypeCost = 1 << 0, ///< 返回方案所需时间及费用成本
AMapWalkingRouteShowFieldTypeNavi = 1 << 1, ///< 返回详细导航动作指令
AMapWalkingRouteShowFieldTypePolyline = 1 << 2, ///< 返回分路段坐标点串,两点间用“,”分隔
AMapWalkingRouteShowFieldTypeAll = ~0UL, ///< 返回所有扩展信息
};
///公交车路线规划返回结果控制 @since 9.4.0
typedef NS_OPTIONS(NSUInteger, AMapTransitRouteShowFieldsType)
{
AMapTransitRouteShowFieldsTypeNone = 1 << 0, ///< 不返回扩展信息
AMapTransitRouteShowFieldsTypeCost = 1 << 1, ///< 返回方案所需时间及费用成本
AMapTransitRouteShowFieldsTypeNavi = 1 << 2, ///< 返回详细导航动作指令
AMapTransitRouteShowFieldsTypePolyline = 1 << 3, ///< 返回分路段坐标点串,两点间用“,”分隔
AMapTransitRouteShowFieldsTypeAll = ~0UL, ///< 返回所有扩展信息
};
///骑行路线规划返回结果控制 @since 9.4.0
typedef NS_OPTIONS(NSUInteger, AMapRidingRouteShowFieldsType)
{
AMapRidingRouteShowFieldsTypeNone = 1 << 0, ///< 不返回扩展信息
AMapRidingRouteShowFieldsTypeCost = 1 << 1, ///< 返回方案所需时间及费用成本
AMapRidingRouteShowFieldsTypeNavi = 1 << 2, ///< 返回详细导航动作指令
AMapRidingRouteShowFieldsTypePolyline = 1 << 3, ///< 返回分路段坐标点串,两点间用“,”分隔
AMapRidingRouteShowFieldsTypeAll = ~0UL, ///< 返回所有扩展信息
};
/// 搜索POI返回结果控制 @since 9.4.0
typedef NS_OPTIONS(NSUInteger, AMapPOISearchShowFieldsType)
{
AMapPOISearchShowFieldsTypeNone = 1 << 0, ///< 不返回扩展信息
AMapPOISearchShowFieldsTypeChildren = 1 << 1, ///< 返回子POI信息
AMapPOISearchShowFieldsTypeBusiness = 1 << 2, ///< 返回商业信息
AMapPOISearchShowFieldsTypeIndoor = 1 << 3, ///< 返回室内相关信息
AMapPOISearchShowFieldsTypeNavi = 1 << 4, ///< 返回导航位置相关信息
AMapPOISearchShowFieldsTypePhotos = 1 << 5, ///< 返回poi图片相关信息
AMapPOISearchShowFieldsTypeAll = ~0UL, ///< 返回所有扩展信息
};
///距离测量类型 @since 7.7.0
typedef NS_ENUM(NSInteger, AMapDistanceSearchType)
{
AMapDistanceSearchTypeStraight = 0, ///< 直线距离
AMapDistanceSearchTypeDrive = 1, ///< 驾车导航距离
AMapDistanceSearchTypeWalk = 3, ///< 步行导航距离
};
#pragma mark - AMapPOISearchBaseRequest
///POI搜索请求基类
@interface AMapPOISearchBaseRequest : AMapSearchObject
///类型,多个类型用“|”分割 可选值:文本分类、分类代码
@property (nonatomic, copy) NSString *types;
///排序规则, 0-距离排序1-综合排序, 默认0
@property (nonatomic, assign) NSInteger sortrule;
///每页记录数, 范围1-25, [default = 10]
@property (nonatomic, assign) NSInteger offset;
///当前页数, 范围1-100, [default = 1]
@property (nonatomic, assign) NSInteger page;
///设置需要返回的扩展信息默认为AMapPOISearchShowFieldsTypeNone只返回基础信息字段
@property (nonatomic, assign) AMapPOISearchShowFieldsType showFieldsType;
@end
///POI ID搜索请求
@interface AMapPOIIDSearchRequest : AMapPOISearchBaseRequest
///poi唯一标识最多可以传入10个id多个id之间用“|”分隔。必填
@property (nonatomic, copy) NSString *uid;
@end
#pragma mark - AMapVisualSearchRequest
///视觉图片搜索请求 (since 9.7.0)
@interface AMapVisualSearchRequest : AMapSearchObject
///图片数据存储地址,必填
@property (nonatomic, copy) NSString *pic;
///用户位置经度在前纬度在后经纬度小数点后不得超过6位必填
@property (nonatomic, copy) AMapGeoPoint *location;
///用户方位0-360度必填
@property (nonatomic, assign) CGFloat angle;
///用户设备标识,必填
@property (nonatomic, copy) NSString *adiu;
@property (nonatomic, copy) NSString *apiKey;
@end
///POI关键字搜索
@interface AMapPOIKeywordsSearchRequest : AMapPOISearchBaseRequest
///查询关键字,多个关键字用“|”分割
@property (nonatomic, copy) NSString *keywords;
///查询城市可选值cityname中文或中文全拼、citycode、adcode.(注:台湾省的城市一律设置为【台湾】,不具体到市。)
@property (nonatomic, copy) NSString *city;
///强制城市限制功能 默认NO例如在上海搜索天安门如果citylimit为true将不返回北京的天安门相关的POI
@property (nonatomic, assign) BOOL cityLimit;
///设置后如果sortrule==0则返回结果会按照距离此点的远近来排序,since 5.2.1
@property (nonatomic, strong) AMapGeoPoint *location;
@end
///POI周边搜索
@interface AMapPOIAroundSearchRequest : AMapPOISearchBaseRequest
///查询关键字,多个关键字用“|”分割。可选
@property (nonatomic, copy) NSString *keywords;
///中心点坐标
@property (nonatomic, copy) AMapGeoPoint *location;
///查询半径范围0-50000单位米 [default = 3000]
@property (nonatomic, assign) NSInteger radius;
///查询城市可选值cityname中文或中文全拼、citycode、adcode。注当用户指定的经纬度和city出现冲突若范围内有用户指定city的数据则返回相关数据否则返回为空。since 5.7.0
@property (nonatomic, copy) NSString *city;
@end
///POI多边形搜索
@interface AMapPOIPolygonSearchRequest : AMapPOISearchBaseRequest
///查询关键字,多个关键字用“|”分割。可选
@property (nonatomic, copy) NSString *keywords;
///多边形区域,多个坐标对集合,坐标对用"|"分割。多边形为矩形时,可传入左上右下两顶点坐标对;其他情况下首尾坐标对需相同。必填
@property (nonatomic, copy) AMapGeoPolygon *polygon;
@end
///POI搜索返回
@interface AMapPOISearchResponse : AMapSearchObject
///返回的POI数目
@property (nonatomic, assign) NSInteger count;
///关键字建议列表和城市建议列表
@property (nonatomic, strong) AMapSuggestion *suggestion;
///POI结果AMapPOI 数组
@property (nonatomic, strong) NSArray<AMapPOI *> *pois;
@end
///视觉识别POI在AMapPOI基础上扩展视觉识别接口特有的字段 @since 9.7.0
@interface AMapVisualPOI : AMapPOI
///行业类型
@property (nonatomic, copy) NSString *bizType;
///别名
@property (nonatomic, copy) NSString *alias;
///特色内容主要出现在美食类POI中代表特色菜
@property (nonatomic, copy) NSString *tag;
///榜单列表
@property (nonatomic, strong) NSArray<AMapTopListItem *> *topList;
///精选评论
@property (nonatomic, copy) NSString *featuredReviews;
@end
///视觉图片搜索返回 (since 9.7.0)
@interface AMapVisualSearchResponse : AMapSearchObject
///场景分类,取值为 poi 或其他
@property (nonatomic, copy) NSString *category;
///识别出的POI结果AMapVisualPOI 数组。仅在 category 为 poi 时有返回
@property (nonatomic, strong) NSArray<AMapVisualPOI *> *pois;
@end
#pragma mark - AMapPOIRouteSearchRequest
///沿途搜索, 注意起点和终点不能相距太远(大概70公里),否则可能搜索结果为空
@interface AMapRoutePOISearchRequest : AMapSearchObject
///中心点坐标
@property (nonatomic, copy) AMapGeoPoint *origin;
///目标点坐标
@property (nonatomic, copy) AMapGeoPoint *destination;
///搜索类型
@property (nonatomic, assign) AMapRoutePOISearchType searchType;
///驾车导航策略同驾车路径规划请求的策略5 多策略除外)
@property (nonatomic, assign) NSInteger strategy;
///道路周围搜索范围,单位米,[0-500]默认250。
@property (nonatomic, assign) NSInteger range;
///用户自己规划的路线,在origin、destination未填入时为必填.格式为:"经度,纬度;经度,纬度;...". 目前限制个数最多为100个点
@property (nonatomic, strong) NSString *polylineStr;
///用户自己规划的路线,在origin、destination未填入且polylineStr未填入时为必填. 目前限制个数最多为100个点
@property (nonatomic, strong) NSArray<AMapGeoPoint*> *polyline;
@end
///沿途搜索返回
@interface AMapRoutePOISearchResponse : AMapSearchObject
///返回的POI数目
@property (nonatomic, assign) NSInteger count;
///POI结果AMapRoutePOI 数组
@property (nonatomic, strong) NSArray<AMapRoutePOI *> *pois;
@end
#pragma mark - AMapInputTipsSearchRequest
///搜索提示请求
@interface AMapInputTipsSearchRequest : AMapSearchObject
///查询关键字
@property (nonatomic, copy) NSString *keywords;
///查询城市可选值cityname中文或中文全拼、citycode、adcode.
@property (nonatomic, copy) NSString *city;
///类型,多个类型用“|”分割 可选值:文本分类、分类代码
@property (nonatomic, copy) NSString *types;
///强制城市限制功能例如在上海搜索天安门如果citylimit为true将不返回北京的天安门相关的POI
@property (nonatomic, assign) BOOL cityLimit;
///格式形如:@"116.481488,39.990464",(经度,纬度)不可以包含空格。如果设置在此location附近优先返回搜索关键词信息, since 5.0.0
@property (nonatomic, copy) NSString *location;
@end
///搜索提示返回
@interface AMapInputTipsSearchResponse : AMapSearchObject
///返回数目
@property (nonatomic, assign) NSInteger count;
///提示列表 AMapTip 数组, AMapTip 有多种属性,可根据该对象的返回信息,配合其他搜索服务使用,完善您应用的功能。如:\n 1uid为空location为空该提示语为品牌词可根据该品牌词进行POI关键词搜索。\n 2uid不为空location为空为公交线路根据uid进行公交线路查询。\n 3uid不为空location也不为空是一个真实存在的POI可直接显示在地图上。
@property (nonatomic, strong) NSArray<AMapTip *> *tips;
@end
#pragma mark - AMapGeocodeSearchRequest
///地理编码请求
@interface AMapGeocodeSearchRequest : AMapSearchObject
///地址
@property (nonatomic, copy) NSString *address;
///查询城市可选值cityname中文或中文全拼、citycode、adcode.
@property (nonatomic, copy) NSString *city;
///指定查询国家,支持多个国家,用“|”分隔可选值国家代码ISO 3166 或 global仅海外生效since 7.4.0
@property (nonatomic, copy) NSString *country;
@end
///地理编码返回
@interface AMapGeocodeSearchResponse : AMapSearchObject
///返回数目
@property (nonatomic, assign) NSInteger count;
///地理编码结果 AMapGeocode 数组
@property (nonatomic, strong) NSArray<AMapGeocode *> *geocodes;
@end
#pragma mark - AMapReGeocodeSearchRequest
///逆地理编码请求
@interface AMapReGeocodeSearchRequest : AMapSearchObject
///是否返回扩展信息默认NO。
@property (nonatomic, assign) BOOL requireExtension;
///中心点坐标。
@property (nonatomic, copy) AMapGeoPoint *location;
///查询半径单位米范围0~3000默认1000。
@property (nonatomic, assign) NSInteger radius;
///指定返回结果poi数组中的POI类型在requireExtension=YES时生效。输入为typecode, 支持传入多个typecode, 多值时用“|”分割
@property (nonatomic, copy) NSString *poitype;
///distance 按距离返回,score 按权重返回仅海外生效since 7.4.0
@property (nonatomic, copy) NSString *mode;
@end
///逆地理编码返回
@interface AMapReGeocodeSearchResponse : AMapSearchObject
///逆地理编码结果
@property (nonatomic, strong) AMapReGeocode *regeocode;
@end
#pragma mark - AMapBusStopSearchRequest
///公交站点请求
@interface AMapBusStopSearchRequest : AMapSearchObject
///查询关键字
@property (nonatomic, copy) NSString *keywords;
///城市 可选值cityname中文或中文全拼、citycode、adcode
@property (nonatomic, copy) NSString *city;
///每页记录数默认为20取值为1-50
@property (nonatomic, assign) NSInteger offset;
///当前页数默认值为1取值为1-100
@property (nonatomic, assign) NSInteger page;
@end
///公交站点返回
@interface AMapBusStopSearchResponse : AMapSearchObject
///公交站数目
@property (nonatomic, assign) NSInteger count;
///关键字建议列表和城市建议列表
@property (nonatomic, strong) AMapSuggestion *suggestion;
///公交站点数组数组中存放AMapBusStop对象
@property (nonatomic, strong) NSArray<AMapBusStop *> *busstops;
@end
#pragma mark - AMapBusLineSearchRequest
///公交线路查询请求基类,不可直接调用
@interface AMapBusLineBaseSearchRequest : AMapSearchObject
///城市 可选值cityname中文或中文全拼、citycode、adcode
@property (nonatomic, copy) NSString *city;
///是否返回扩展信息默认为NO
@property (nonatomic, assign) BOOL requireExtension;
///每页记录数默认为20取值为150
@property (nonatomic, assign) NSInteger offset;
///当前页数默认为1取值为1-100
@property (nonatomic, assign) NSInteger page;
@end
///公交站线路根据名字请求
@interface AMapBusLineNameSearchRequest : AMapBusLineBaseSearchRequest
///查询关键字
@property (nonatomic, copy) NSString *keywords;
@end
///公交站线路根据ID请求
@interface AMapBusLineIDSearchRequest : AMapBusLineBaseSearchRequest
///唯一标识
@property (nonatomic, copy) NSString *uid;
@end
///公交站线路返回
@interface AMapBusLineSearchResponse : AMapSearchObject
///返回公交站数目
@property (nonatomic, assign) NSInteger count;
///关键字建议列表和城市建议列表
@property (nonatomic, strong) AMapSuggestion *suggestion;
///公交线路数组,数组中存放 AMapBusLine 对象
@property (nonatomic, strong) NSArray<AMapBusLine *> *buslines;
@end
#pragma mark - AMapDistrictSearchRequest
///行政区划查询请求
@interface AMapDistrictSearchRequest : AMapSearchObject
///查询关键字,只支持单关键字搜索,全国范围
@property (nonatomic, copy) NSString *keywords;
///是否返回边界坐标默认NO
@property (nonatomic, assign) BOOL requireExtension;
///是否显示商圈信息默认NO。注已废弃行政区划搜索无商圈信息。
@property (nonatomic, assign) BOOL showBusinessArea __attribute__((deprecated("已废弃, from 5.3.0")));;
///每页记录数, 范围1-50, [default = 20]
@property (nonatomic, assign) NSInteger offset;
///当前页数, 范围1-100, [default = 1]
@property (nonatomic, assign) NSInteger page;
///子区域层级默认1。规则设置显示下级行政区级数行政区级别包括国家、省/直辖市、市、区/县、乡镇/街道多级数据可选值0、1、2、3等数字0-不返回下级行政区1-返回下一级行政区2-返回下两级行政区3-返回下三级行政区
@property (nonatomic, assign) NSInteger subdistrict;
@end
///行政区划响应
@interface AMapDistrictSearchResponse : AMapSearchObject
///返回数目
@property (nonatomic, assign) NSInteger count;
///行政区域 AMapDistrict 数组
@property (nonatomic, strong) NSArray<AMapDistrict *> *districts;
@end
#pragma mark - AMapRouteSearchBaseRequest
///路径规划基础类,不可直接调用
@interface AMapRouteSearchBaseRequest : AMapSearchObject
///出发点
@property (nonatomic, copy) AMapGeoPoint *origin;
///目的地
@property (nonatomic, copy) AMapGeoPoint *destination;
@end
#pragma mark - AMapDrivingCalRouteSearchRequest
///驾车路径规划2.0
@interface AMapDrivingCalRouteSearchRequest : AMapRouteSearchBaseRequest
/**
32
32APP默认
33
34
35
36
37
38
39
40
41
42
43
44
45
*/
@property (nonatomic, assign) NSInteger strategy;
///途经点 AMapGeoPoint 数组目前最多支持16个途经点
@property (nonatomic, copy) NSArray<AMapGeoPoint *> *waypoints;
///避让区域 AMapGeoPolygon 数组目前最多支持32个避让区域每个区域16个点
@property (nonatomic, copy) NSArray<AMapGeoPolygon *> *avoidpolygons;
///避让道路名
@property (nonatomic, copy) NSString *avoidroad;
///出发点 POI ID
@property (nonatomic, copy) NSString *originId;
///目的地 POI ID
@property (nonatomic, copy) NSString *destinationId;
///出发点POI类型编码此值可以辅助更精准的起点算路0普通道路、1高架上、2高架下、3主路、4辅路、5隧道、7环岛、9停车场内部
@property (nonatomic, copy) NSString *origintype;
///目的地POI类型编码
@property (nonatomic, copy) NSString *destinationtype;
///车牌信息如京AHA322支持6位传统车牌和7位新能源车牌用于判断是否限行
@property (nonatomic, copy) NSString *plate;
///使用轮渡,0使用1不使用,默认为0使用
@property (nonatomic, assign) NSInteger ferry;
/**
0
0();
1;
2
*/
@property (nonatomic, assign) NSInteger cartype;
///设置需要返回的扩展信息默认为AMapDrivingRouteShowFieldTypeNone只返回基础信息字段
@property (nonatomic, assign) AMapDrivingRouteShowFieldType showFieldType;
@end
#pragma mark - AMapDrivingRouteSearchRequest
///驾车路径规划
@interface AMapDrivingRouteSearchRequest : AMapRouteSearchBaseRequest
/**
0
0)1234
5使使
6789
10
11
12
13
14
15
16
17
18
19
20
*/
@property (nonatomic, assign) NSInteger strategy;
///途经点 AMapGeoPoint 数组目前最多支持6个途经点
@property (nonatomic, copy) NSArray<AMapGeoPoint *> *waypoints;
///避让区域 AMapGeoPolygon 数组目前最多支持100个避让区域每个区域16个点
@property (nonatomic, copy) NSArray<AMapGeoPolygon *> *avoidpolygons;
///避让道路名
@property (nonatomic, copy) NSString *avoidroad;
///出发点 POI ID
@property (nonatomic, copy) NSString *originId;
///目的地 POI ID
@property (nonatomic, copy) NSString *destinationId;
///出发点POI类型编码
@property (nonatomic, copy) NSString *origintype;
///目的地POI类型编码
@property (nonatomic, copy) NSString *destinationtype;
///是否返回扩展信息,默认为 NO
@property (nonatomic, assign) BOOL requireExtension;
///车牌省份,用汉字填入车牌省份缩写。用于判断是否限行
@property (nonatomic, copy) NSString *plateProvince;
///车牌详情,填入除省份及标点之外的字母和数字(需大写)。用于判断是否限行。
@property (nonatomic, copy) NSString *plateNumber;
///使用轮渡,0使用1不使用,默认为0使用
@property (nonatomic, assign) NSInteger ferry;
/**
0
0();
1;
2
*/
@property (nonatomic, assign) NSInteger cartype;
///规避道路类型,默认为AMapDrivingRouteExcludeTypeNone仅海外生效
@property (nonatomic, assign) AMapDrivingRouteExcludeType exclude;
@end
#pragma mark - AMapWalkingRouteSearchRequest
///步行路径规划
@interface AMapWalkingRouteSearchRequest : AMapRouteSearchBaseRequest
///是否提供备选步行方案([default = 0])0-只提供一条步行方案; 1-提供备选步行方案(有可能无备选方案)
@property (nonatomic, assign) NSInteger multipath __attribute__((deprecated("已废弃, from 5.0.0")));
///是否需要室内算路. 0 : 不需要 (默认值); 1 : 需要
@property (nonatomic, assign) NSInteger isindoor;
///返回路线条数, 0: 默认返回一条路线方案; 1 : 多备选路线中第一条路线; 2 : 多备选路线中前两条路线; 3 : 多备选路线中三条路线
@property (nonatomic, assign) NSInteger alternativeRoute;
///设置需要返回的扩展信息默认为AMapPOISearchShowFieldsTypeNone只返回基础信息字段
@property (nonatomic, assign) AMapWalkingRouteShowFieldType showFieldsType;
@end
#pragma mark - AMapTransitRouteSearchRequest
///公交路径规划
@interface AMapTransitRouteSearchRequest : AMapRouteSearchBaseRequest
///公交换乘策略([default = 0])
/*
0APP默认
1
2
3
4
5线
6originpoi及destinationpoi为必填项
74KM
8
*/
@property (nonatomic, assign) NSInteger strategy;
///起点所在城市, 必填. 仅支持citycode
@property (nonatomic, copy) NSString *city;
///目的地所在城市, 必填. 仅支持citycode与city相同时代表同城不同时代表跨城
@property (nonatomic, copy) NSString *destinationCity;
///是否包含夜班车,默认为 NO
@property (nonatomic, assign) BOOL nightflag;
///起点POI ID
@property (nonatomic, copy) NSString *originPOI;
///目的地POI ID
@property (nonatomic, copy) NSString *destinationPOI;
///起点所在行政区域编码
@property (nonatomic, copy) NSString *adcode;
///终点所在行政区域编码
@property (nonatomic, copy) NSString *destinationAdcode;
///返回方案条数 可传入1-10的阿拉伯数字代表返回的不同条数。默认值5
@property (nonatomic, assign) NSInteger alternativeRoute;
/// 是否返回所有地铁出入口默认为NO
@property (nonatomic, assign) BOOL multiExport;
/// 最大换乘次数 0直达 1最多换乘1次 2最多换乘2次 3最多换乘3次 4最多换乘4次。默认值4
@property (nonatomic, assign) NSInteger maxTrans;
///请求日期 例如:2013-10-28
@property (nonatomic, copy) NSString *date;
///请求时间 例如:9-54
@property (nonatomic, copy) NSString *time;
///返回结果控制
@property (nonatomic, assign) AMapTransitRouteShowFieldsType showFieldsType;
@end
#pragma mark - AMapRidingRouteSearchRequest
///骑行路径规划
@interface AMapRidingRouteSearchRequest : AMapRouteSearchBaseRequest
///返回路线条数, 0: 默认返回一条路线方案; 1 : 多备选路线中第一条路线; 2 : 多备选路线中前两条路线; 3 : 多备选路线中三条路线
@property (nonatomic, assign) NSInteger alternativeRoute;
///返回结果控制
@property (nonatomic, assign) AMapRidingRouteShowFieldsType showFieldsType;
@end
///路径规划返回
@interface AMapRouteSearchResponse : AMapSearchObject
///路径规划信息数目
@property (nonatomic, assign) NSInteger count;
///路径规划信息
@property (nonatomic, strong) AMapRoute *route;
@end
///骑行路径规划返回
@interface AMapRidingRouteSearchResponse : AMapRouteSearchResponse
@end
#pragma mark - AMapTruckRouteSearchRequest
///货车路径规划since 6.1.0
@interface AMapTruckRouteSearchRequest : AMapRouteSearchBaseRequest
/**
1
1
2
3
4&
5&
6&
7&&
8
9&
*/
@property (nonatomic, assign) NSInteger strategy;
///途经点 AMapGeoPoint 数组最多支持16个途经点
@property (nonatomic, copy) NSArray<AMapGeoPoint *> *waypoints;
///出发点 POI ID
@property (nonatomic, copy) NSString *originId;
///目的地 POI ID
@property (nonatomic, copy) NSString *destinationId;
///出发点POI类型编码
@property (nonatomic, copy) NSString *origintype;
///目的地POI类型编码
@property (nonatomic, copy) NSString *destinationtype;
///车牌省份,用汉字填入车牌省份缩写。用于判断是否限行
@property (nonatomic, copy) NSString *plateProvince;
///车牌详情,填入除省份及标点之外的字母和数字(需大写)。用于判断是否限行。
@property (nonatomic, copy) NSString *plateNumber;
///货车大小,默认为 轻型车AMapTruckSizeTypeLight
@property (nonatomic, assign) AMapTruckSizeType size;
///车辆高度,单位米,取值[0 25.5]米,默认 1.6 米
@property (nonatomic, assign) CGFloat height;
///车辆宽度,单位米,取值[0 25.5]米,默认 2.5 米
@property (nonatomic, assign) CGFloat width;
///车辆总重,单位吨,取值[0 6553.5]吨,默认 0.9 吨
@property (nonatomic, assign) CGFloat load;
///货车核定载重,单位吨,取值[0 6553.5]吨,默认 10 吨
@property (nonatomic, assign) CGFloat weight;
///车辆轴数,单位个,取值[0 255]个,默认 2个轴
@property (nonatomic, assign) NSInteger axis;
///是否返回扩展信息,默认为 NO since 7.6.0
@property (nonatomic, assign) BOOL requireExtension;
@end
#pragma mark - AMapDistanceSearchRequest
///距离查询请求since 6.1.0
@interface AMapDistanceSearchRequest : AMapSearchObject
///起点坐标数组最多支持100个点。
@property (nonatomic, strong) NSArray<AMapGeoPoint *> *origins;
///终点坐标
@property (nonatomic, strong) AMapGeoPoint *destination;
///路径计算的类型当type为导航距离时会考虑路况故在不同时间请求返回结果可能不同
@property (nonatomic, assign) AMapDistanceSearchType type;
///驾车距离测量策略参考驾车路径规划。仅当type为AMapDistanceSearchTypeDrive时有效默认4
@property (nonatomic, assign) NSInteger strategy;
///是否返回扩展信息,默认为 NO since 7.6.0
@property (nonatomic, assign) BOOL requireExtension;
@end
///距离查询结果since 6.1.0
@interface AMapDistanceSearchResponse : AMapSearchObject
///距离查询结果 AMapDistanceResult 数组。
@property (nonatomic, strong) NSArray<AMapDistanceResult *> *results;
@end
#pragma mark - AMapWeatherSearchRequest
///天气查询请求
@interface AMapWeatherSearchRequest : AMapSearchObject
///城市名称支持cityname及adcode
@property (nonatomic, copy) NSString *city;
///气象类型Live为实时天气Forecast为后三天预报天气默认为Live
@property (nonatomic, assign) AMapWeatherType type;
@end
///天气查询返回
@interface AMapWeatherSearchResponse : AMapSearchObject
///实时天气数据信息 AMapLocalWeatherLive 数组,仅在请求实时天气时有返回。
@property (nonatomic, strong) NSArray<AMapLocalWeatherLive *> *lives;
///预报天气数据信息 AMapLocalWeatherForecast 数组,仅在请求预报天气时有返回
@property (nonatomic, strong) NSArray<AMapLocalWeatherForecast *> *forecasts;
@end
#pragma mark - AMapNearbySearchRequest
///附近搜索请求
@interface AMapNearbySearchRequest : AMapSearchObject
///中心点坐标
@property (nonatomic, copy) AMapGeoPoint *center;
///查询半径,范围:[0, 10000],单位:米 [default = 1000]
@property (nonatomic, assign) NSInteger radius;
///搜索距离类型,默认为直线距离
@property (nonatomic, assign) AMapNearbySearchType searchType;
///检索时间范围超过24小时的数据无法返回范围[5, 24*60*60] 单位:秒 [default = 1800]
@property (nonatomic, assign) NSInteger timeRange;
///返回条数,范围[1, 100], 默认30
@property (nonatomic, assign) NSInteger limit;
@end
///附近搜索返回
@interface AMapNearbySearchResponse : AMapSearchObject
///结果总条数
@property (nonatomic, assign) NSInteger count;
///周边用户信息 AMapNearbyUserInfo 数组
@property (nonatomic, strong) NSArray<AMapNearbyUserInfo *> *infos;
@end
#pragma mark - AMapCloudSearchBaseRequest
///企业地图搜索请求基类
@interface AMapCloudSearchBaseRequest : AMapSearchObject
///要查询的表格ID, 必选
@property (nonatomic, copy) NSString *tableID;
///筛选条件数组, 可选, 说明:\n 1.支持建立索引的字段根据多个条件筛选,多个条件用双&符号连接;\n 2.判断符合支持:>= 大于等于,<= 小于等于,>大于,<小于,= 精确匹配(text索引不可用);\n 3.示例规则key1=value1&&key2=value2&&lastloctime>=1469817532示例"name=王师傅|张师傅&&lastloctime>=1469817532
@property (nonatomic, strong) NSArray<NSString *> *filter;
///排序字段名, 可选.\n 说明:\n 1.支持按建立了排序筛选索引的整数或小数字段进行排序sortFields = "字段名"\n 2.系统预设的字段(忽略sortType)_distance坐标与中心点距离升序排序仅在周边检索时有效若其它请求使用会异常返回_weight权重降序排序当存在keywords时有效\n
@property (nonatomic, copy) NSString *sortFields;
///可选, 排序方式(默认升序)
@property (nonatomic, assign) AMapCloudSortType sortType;
///可选, 每页记录数(每页最大记录数100, 默认20)
@property (nonatomic, assign) NSInteger offset;
///可选, 当前页数(>=1, 默认1)
@property (nonatomic, assign) NSInteger page;
@end
#pragma mark - AMapCloudPlaceAroundSearchRequest
///企业地图周边搜请求
@interface AMapCloudPOIAroundSearchRequest : AMapCloudSearchBaseRequest
///必填,中心点坐标。
@property (nonatomic, copy) AMapGeoPoint *center;
///可选查询半径默认值为3000单位
@property (nonatomic, assign) NSInteger radius;
///可选,搜索关键词。\n 说明1. 只支持建立过文本索引的字段查询/n 2.支持关键字模糊检索即对建立【文本索引字段】对应列内容进行模糊检索如keywords=工商银行检索返回已建立文本索引列值中包含“工商”或者“银行”或者“工商银行”关键字的POI结果集。/n 3.支持关键字多值模糊检索如keywords=招商银行&&华夏银行&&工商银行检索返回已建立索引列值中包含“招商银行”或者“华夏银行”或者“工商银行”的POI结果集不会返回检索词切分后如仅包含“招商”或者“银行”的POI集
@property (nonatomic, copy) NSString *keywords;
@end
///企业地图polygon区域查询请求
@interface AMapCloudPOIPolygonSearchRequest : AMapCloudSearchBaseRequest
///必填,多边形。
@property (nonatomic, copy) AMapGeoPolygon *polygon;
///可选,搜索关键词。\n 说明1. 只支持建立过文本索引的字段查询/n 2.支持关键字模糊检索即对建立【文本索引字段】对应列内容进行模糊检索如keywords=工商银行检索返回已建立文本索引列值中包含“工商”或者“银行”或者“工商银行”关键字的POI结果集。/n 3.支持关键字多值模糊检索如keywords=招商银行&&华夏银行&&工商银行检索返回已建立索引列值中包含“招商银行”或者“华夏银行”或者“工商银行”的POI结果集不会返回检索词切分后如仅包含“招商”或者“银行”的POI集
@property (nonatomic, copy) NSString *keywords;
@end
///企业地图ID查询请求
@interface AMapCloudPOIIDSearchRequest : AMapCloudSearchBaseRequest
///必填,POI的ID
@property (nonatomic, assign) NSInteger uid;
@end
///企业地图本地查询请求
@interface AMapCloudPOILocalSearchRequest : AMapCloudSearchBaseRequest
///可选,搜索关键词。\n 说明1. 只支持建立过文本索引的字段查询/n 2.支持关键字模糊检索即对建立【文本索引字段】对应列内容进行模糊检索如keywords=工商银行检索返回已建立文本索引列值中包含“工商”或者“银行”或者“工商银行”关键字的POI结果集。/n 3.支持关键字多值模糊检索如keywords=招商银行&&华夏银行&&工商银行检索返回已建立索引列值中包含“招商银行”或者“华夏银行”或者“工商银行”的POI结果集不会返回检索词切分后如仅包含“招商”或者“银行”的POI集
@property (nonatomic, copy) NSString *keywords;
///必填,城市名称\n 说明:\n 1. 支持全国/省/市/区县行政区划范围的检索;\n 2. city = "全国",即对用户全表搜索;\n 3. 当city值设置非法或不正确时按照 city = "全国"返回。
@property (nonatomic, copy) NSString *city;
@end
///企业地图搜索返回
@interface AMapCloudPOISearchResponse : AMapSearchObject
///返回结果总数目
@property (nonatomic, assign) NSInteger count;
///返回的结果, AMapCloudPOI 数组
@property (nonatomic, strong) NSArray<AMapCloudPOI *> *POIs;
@end
#pragma mark - AMapShareSearchBaseRequest
///短串分享搜索请求基类, 请使用具体的子类。
@interface AMapShareSearchBaseRequest : AMapSearchObject
@end
///位置短串分享请求
@interface AMapLocationShareSearchRequest : AMapShareSearchBaseRequest
///必填, 位置坐标
@property (nonatomic, copy) AMapGeoPoint *location;
///位置名称,请不要包含【,%&@#】等特殊符号
@property (nonatomic, copy) NSString *name;
@end
///兴趣点短串分享请求
@interface AMapPOIShareSearchRequest : AMapShareSearchBaseRequest
///POI的ID如果有ID则指定POI否则按name查询。
@property (nonatomic, copy) NSString *uid;
///坐标
@property (nonatomic, copy) AMapGeoPoint *location;
///名称,请不要包含【,%&@#】等特殊符号。
@property (nonatomic, copy) NSString *name;
///地址,请不要包含【,%&@#】等特殊符号。
@property (nonatomic, copy) NSString *address;
@end
///路径规划短串分享请求
@interface AMapRouteShareSearchRequest : AMapShareSearchBaseRequest
///默认为0\n 驾车:0-速度最快(时间);\n 1-避免收费(不走收费路段的最快道路);\n 2-距离优先;\n 3-不走高速;\n 4-结合实时交通(躲避拥堵);\n 5-不走高速且避免收费;\n 6-不走高速且躲避拥堵;\n 7-躲避收费和拥堵;\n 8-不走高速且躲避收费和拥堵\n\n 公交:0-最快捷;\n 1-最经济;\n 2-最少换乘;\n 3-最少步行;\n 4-最舒适;\n 5-不乘地铁;\n\n 步行,无策略,均一样
@property (nonatomic, assign) NSInteger strategy;
///Route的type默认为0超出范围为0.\n 0为驾车\n 1为公交\n 2为步行
@property (nonatomic, assign) NSInteger type;
///起点坐标
@property (nonatomic, copy) AMapGeoPoint *startCoordinate;
///终点坐标
@property (nonatomic, copy) AMapGeoPoint *destinationCoordinate;
///起点名称,默认为“已选择的位置”,请不要包含【,%&@#】等特殊符号
@property (nonatomic, copy) NSString *startName;
///终点名称,默认为“已选择的位置”,请不要包含【,%&@#】等特殊符号
@property (nonatomic, copy) NSString *destinationName;
@end
///导航短串分享请求
@interface AMapNavigationShareSearchRequest : AMapShareSearchBaseRequest
///默认为0超出范围为0\n 驾车:0-速度最快(时间);\n 1-避免收费(不走收费路段的最快道路);\n 2-距离优先;\n 3-不走高速;\n 4-结合实时交通(躲避拥堵);\n 5-不走高速且避免收费;\n 6-不走高速且躲避拥堵;\n 7-躲避收费和拥堵;\n 8-不走高速且躲避收费和拥堵
@property (nonatomic, assign) NSInteger strategy;
///起点坐标,若跳转到高德地图,默认更换为定位坐标
@property (nonatomic, copy) AMapGeoPoint *startCoordinate;
///终点坐标
@property (nonatomic, copy) AMapGeoPoint *destinationCoordinate;
@end
///导航短串分享响应
@interface AMapShareSearchResponse : AMapSearchObject
///转换后的短串
@property (nonatomic, copy) NSString *shareURL;
@end
///未来路线规划since 6.9.0
@interface AMapFutureRouteSearchRequest : AMapRouteSearchBaseRequest
///出发时间 单位为秒
@property (nonatomic, copy) NSString *beginTime;
///时间间隔 单位为秒
@property (nonatomic, assign) NSInteger interval;
///时间点个数,最多48个
@property (nonatomic, assign) NSInteger timeCount;
/**
线0
1
2
3
4&
5&
6&
7&&
8
9&
10线线
11&&
*/
@property (nonatomic, assign) NSInteger strategy;
///出发点 POI ID
@property (nonatomic, copy) NSString *originId;
///目的地 POI ID
@property (nonatomic, copy) NSString *destinationId;
///出发点POI类型编码
@property (nonatomic, copy) NSString *origintype;
///目的地POI类型编码
@property (nonatomic, copy) NSString *destinationtype;
///终点的父POI ID
@property (nonatomic, copy) NSString *parentId;
/////是否返回扩展信息,默认为 NO
//@property (nonatomic, assign) BOOL requireExtension;
///车牌省份,用汉字填入车牌省份缩写。用于判断是否限行
@property (nonatomic, copy) NSString *plateProvince;
///车牌详情,填入除省份及标点之外的字母和数字(需大写)。用于判断是否限行。
@property (nonatomic, copy) NSString *plateNumber;
/**
0
0();
1;
2
*/
@property (nonatomic, assign) NSInteger cartype;
@end
///未来路线规划since 6.9.0
@interface AMapFutureRouteSearchResponse : AMapSearchObject
///路径规划方案,只会返回AMapPath中的distance、totalTrafficLights、steps
@property (nonatomic, strong) NSArray<AMapPath *> *paths;
///不同时间的规划以及信息列表
@property (nonatomic, strong) NSArray<AMapFutureTimeInfo *> *timeInfos;
@end
/// 充电站搜索since 9.7.0
@interface AMapChargeStationSearchRequest : AMapSearchObject
@end
/// 充电站搜索since 9.7.0
@interface AMapChargeStationSearchResponse : AMapSearchObject
@end

View File

@ -0,0 +1,84 @@
//
// AMapSearchObjV1.h
// AMapSearchKit
//
// Created by xiaoming han on 15/7/22.
// Copyright (c) 2015年 Amap. All rights reserved.
//
/* 该文件定义了搜索请求和返回对象。*/
#import <Foundation/Foundation.h>
#import "AMapCommonObj.h"
#import "AMapSearchObj.h"
#pragma mark - AMapPOISearchBaseRequestV1
///POI搜索请求基类
@interface AMapPOISearchBaseRequestV1 : AMapSearchObject
///类型,多个类型用“|”分割 可选值:文本分类、分类代码
@property (nonatomic, copy) NSString *types;
///排序规则, 0-距离排序1-综合排序, 默认0
@property (nonatomic, assign) NSInteger sortrule;
///每页记录数, 范围1-25, [default = 20]
@property (nonatomic, assign) NSInteger offset;
///当前页数, 范围1-100, [default = 1]
@property (nonatomic, assign) NSInteger page;
///建筑物POI编号传入建筑物POI之后则只在该建筑物之内进行搜索since 4.5.0
@property (nonatomic, copy) NSString *building;
///是否返回扩展信息,默认为 NO。
@property (nonatomic, assign) BOOL requireExtension;
///是否返回子POI默认为 NO。
@property (nonatomic, assign) BOOL requireSubPOIs;
@end
///POI ID搜索请求
@interface AMapPOIIDSearchRequestV1 : AMapPOISearchBaseRequestV1
///POI全局唯一ID
@property (nonatomic, copy) NSString *uid;
@end
///POI关键字搜索
@interface AMapPOIKeywordsSearchRequestV1 : AMapPOISearchBaseRequestV1
///查询关键字,多个关键字用“|”分割
@property (nonatomic, copy) NSString *keywords;
///查询城市可选值cityname中文或中文全拼、citycode、adcode.(注:台湾省的城市一律设置为【台湾】,不具体到市。)
@property (nonatomic, copy) NSString *city;
///强制城市限制功能 默认NO例如在上海搜索天安门如果citylimit为true将不返回北京的天安门相关的POI
@property (nonatomic, assign) BOOL cityLimit;
///设置后如果sortrule==0则返回结果会按照距离此点的远近来排序,since 5.2.1
@property (nonatomic, strong) AMapGeoPoint *location;
@end
///POI周边搜索
@interface AMapPOIAroundSearchRequestV1 : AMapPOISearchBaseRequestV1
///查询关键字,多个关键字用“|”分割
@property (nonatomic, copy) NSString *keywords;
///中心点坐标
@property (nonatomic, copy) AMapGeoPoint *location;
///查询半径范围0-50000单位米 [default = 1500]
@property (nonatomic, assign) NSInteger radius;
///查询城市可选值cityname中文或中文全拼、citycode、adcode。注当用户指定的经纬度和city出现冲突若范围内有用户指定city的数据则返回相关数据否则返回为空。since 5.7.0
@property (nonatomic, copy) NSString *city;
///是否对结果进行人工干预如火车站原因为poi较为特殊结果存在人工干预干预结果优先所以距离优先的排序未生效,默认为YES (since 7.4.0)
@property (nonatomic, assign) BOOL special;
@end
///POI多边形搜索
@interface AMapPOIPolygonSearchRequestV1 : AMapPOISearchBaseRequestV1
///查询关键字,多个关键字用“|”分割
@property (nonatomic, copy) NSString *keywords;
///多边形
@property (nonatomic, copy) AMapGeoPolygon *polygon;
@end
///POI搜索返回
@interface AMapPOISearchResponseV1 : AMapSearchObject
///返回的POI数目
@property (nonatomic, assign) NSInteger count;
///关键字建议列表和城市建议列表
@property (nonatomic, strong) AMapSuggestion *suggestion;
///POI结果AMapPOI 数组
@property (nonatomic, strong) NSArray<AMapPOI *> *pois;
@end

View File

@ -0,0 +1,26 @@
//
// AMapSearchVersion.h
// AMapSearchKit
//
// Created by xiaoming han on 15/10/27.
// Copyright © 2015年 Amap. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <AMapFoundationKit/AMapFoundationVersion.h>
#ifndef AMapSearchVersion_h
#define AMapSearchVersion_h
#define AMapSearchVersionNumber 90800
#define AMapSearchMinRequiredFoundationVersion 10900
// 依赖库版本检测
#if AMapFoundationVersionNumber < AMapSearchMinRequiredFoundationVersion
#error "The AMapFoundationKit version is less than minimum required, please update! Any questions please to visit http://lbs.amap.com"
#endif
FOUNDATION_EXTERN NSString * const AMapSearchVersion;
FOUNDATION_EXTERN NSString * const AMapSearchName;
#endif /* AMapSearchVersion_h */

Binary file not shown.

View File

@ -0,0 +1,6 @@
framework module AMapSearchKit {
umbrella header "AMapSearchKit.h"
export *
module * { export * }
}

View File

@ -0,0 +1 @@
9.8.0+sea.0c27f12

7
Pods/Manifest.lock generated
View File

@ -6,6 +6,8 @@ PODS:
- AMapFoundation-NO-IDFA (>= 1.9.0) - AMapFoundation-NO-IDFA (>= 1.9.0)
- AMapNavi-NO-IDFA (11.2.000): - AMapNavi-NO-IDFA (11.2.000):
- AMapFoundation-NO-IDFA (>= 1.9.0) - AMapFoundation-NO-IDFA (>= 1.9.0)
- AMapSearch-NO-IDFA (9.8.0):
- AMapFoundation-NO-IDFA (>= 1.9.0)
- BRPickerView (3.0.0): - BRPickerView (3.0.0):
- BRPickerView/Default (= 3.0.0) - BRPickerView/Default (= 3.0.0)
- BRPickerView/Core (3.0.0) - BRPickerView/Core (3.0.0)
@ -188,6 +190,7 @@ DEPENDENCIES:
- AlipaySDK-iOS - AlipaySDK-iOS
- AMapLocation-NO-IDFA - AMapLocation-NO-IDFA
- AMapNavi-NO-IDFA - AMapNavi-NO-IDFA
- AMapSearch-NO-IDFA
- BRPickerView - BRPickerView
- CocoaLumberjack/Swift - CocoaLumberjack/Swift
- CocoaMQTT - CocoaMQTT
@ -231,6 +234,7 @@ SPEC REPOS:
- AMapFoundation-NO-IDFA - AMapFoundation-NO-IDFA
- AMapLocation-NO-IDFA - AMapLocation-NO-IDFA
- AMapNavi-NO-IDFA - AMapNavi-NO-IDFA
- AMapSearch-NO-IDFA
- BRPickerView - BRPickerView
- CocoaLumberjack - CocoaLumberjack
- CocoaMQTT - CocoaMQTT
@ -296,6 +300,7 @@ SPEC CHECKSUMS:
AMapFoundation-NO-IDFA: a2e3c895398d7ee757278e1a0a8f9359da4b146e AMapFoundation-NO-IDFA: a2e3c895398d7ee757278e1a0a8f9359da4b146e
AMapLocation-NO-IDFA: 7cd8fc837ea41edfbf4d937cd20572e277b77d18 AMapLocation-NO-IDFA: 7cd8fc837ea41edfbf4d937cd20572e277b77d18
AMapNavi-NO-IDFA: d55b9b138c6e540f737c689975cae2c9dbd1026a AMapNavi-NO-IDFA: d55b9b138c6e540f737c689975cae2c9dbd1026a
AMapSearch-NO-IDFA: c0afd2a69a076d4228becda4401dbe4a279a03ef
BRPickerView: cd2e0e3aa87af062bc7a1b6f78d3dfd5f04f04bb BRPickerView: cd2e0e3aa87af062bc7a1b6f78d3dfd5f04f04bb
CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6 CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6
CocoaMQTT: 1e2fa493d57045d66fb1eba2bb5ffb8d77039c60 CocoaMQTT: 1e2fa493d57045d66fb1eba2bb5ffb8d77039c60
@ -347,6 +352,6 @@ SPEC CHECKSUMS:
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117 ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117
PODFILE CHECKSUM: 848cd9ba02b2f1c209ac9eef708dd2c43b005385 PODFILE CHECKSUM: 55d478000a8bba48e7bb7de252ef246a0b3784c4
COCOAPODS: 1.16.2 COCOAPODS: 1.16.2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1600"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4F1379598302C9160590B3650C10E1A5"
BuildableName = "AMapSearch-NO-IDFA"
BlueprintName = "AMapSearch-NO-IDFA"
ReferencedContainer = "container:Pods.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -19,6 +19,11 @@
<key>isShown</key> <key>isShown</key>
<false/> <false/>
</dict> </dict>
<key>AMapSearch-NO-IDFA.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
</dict>
<key>Alamofire-Alamofire.xcscheme</key> <key>Alamofire-Alamofire.xcscheme</key>
<dict> <dict>
<key>isShown</key> <key>isShown</key>

View File

@ -0,0 +1,17 @@
ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapSearch-NO-IDFA"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreLocation" -framework "CoreTelephony" -framework "Security" -framework "SystemConfiguration"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/AMapSearch-NO-IDFA
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA"

View File

@ -0,0 +1,17 @@
ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapSearch-NO-IDFA"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"z" -framework "CoreLocation" -framework "CoreTelephony" -framework "Security" -framework "SystemConfiguration"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/AMapSearch-NO-IDFA
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*] = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA"

View File

@ -16,6 +16,11 @@ Copyright © 2014 AutoNavi. All Rights Reserved.
Copyright © 2014 AutoNavi. All Rights Reserved. Copyright © 2014 AutoNavi. All Rights Reserved.
## AMapSearch-NO-IDFA
Copyright © 2014 AutoNavi. All Rights Reserved.
## Alamofire ## Alamofire
Copyright (c) 2014-2022 Alamofire Software Foundation (http://alamofire.org/) Copyright (c) 2014-2022 Alamofire Software Foundation (http://alamofire.org/)

View File

@ -45,6 +45,17 @@
<key>Type</key> <key>Type</key>
<string>PSGroupSpecifier</string> <string>PSGroupSpecifier</string>
</dict> </dict>
<dict>
<key>FooterText</key>
<string>Copyright © 2014 AutoNavi. All Rights Reserved.
</string>
<key>License</key>
<string>Copyright</string>
<key>Title</key>
<string>AMapSearch-NO-IDFA</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Copyright (c) 2014-2022 Alamofire Software Foundation (http://alamofire.org/) <string>Copyright (c) 2014-2022 Alamofire Software Foundation (http://alamofire.org/)

View File

@ -2,13 +2,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
ARCHS = $(ARCHS_STANDARD) ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
ENABLE_USER_SCRIPT_SANDBOXING = NO ENABLE_USER_SCRIPT_SANDBOXING = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture/RxGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture/RxGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "BRPickerView" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxGesture" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI" OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AMapSearchKit" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "BRPickerView" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxGesture" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI"
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR} PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

View File

@ -2,13 +2,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
ARCHS = $(ARCHS_STANDARD) ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
ENABLE_USER_SCRIPT_SANDBOXING = NO ENABLE_USER_SCRIPT_SANDBOXING = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture/RxGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxGesture/RxGesture.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "BRPickerView" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxGesture" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI" OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"iconv" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AMapSearchKit" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "AudioToolbox" -framework "BRPickerView" -framework "CFNetwork" -framework "CallKit" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxGesture" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI"
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapNavi-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxGesture" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
PODS_BUILD_DIR = ${BUILD_DIR} PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

View File

@ -206,6 +206,9 @@
30D74ABD2FEA67EA0050EB2C /* CreateScheduleVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74ABC2FEA67EA0050EB2C /* CreateScheduleVC.swift */; }; 30D74ABD2FEA67EA0050EB2C /* CreateScheduleVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74ABC2FEA67EA0050EB2C /* CreateScheduleVC.swift */; };
30D74ABF2FEA67F30050EB2C /* CreateScheduleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74ABE2FEA67F30050EB2C /* CreateScheduleView.swift */; }; 30D74ABF2FEA67F30050EB2C /* CreateScheduleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74ABE2FEA67F30050EB2C /* CreateScheduleView.swift */; };
30D74AC12FEA6EEF0050EB2C /* CreateSchedulePopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74AC02FEA6EEF0050EB2C /* CreateSchedulePopView.swift */; }; 30D74AC12FEA6EEF0050EB2C /* CreateSchedulePopView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74AC02FEA6EEF0050EB2C /* CreateSchedulePopView.swift */; };
30D74BF32FEB6F5B0050EB2C /* LocationPickerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74BF02FEB6F5B0050EB2C /* LocationPickerVC.swift */; };
30D74BF42FEB6F5B0050EB2C /* LocationPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74BF12FEB6F5B0050EB2C /* LocationPickerView.swift */; };
30D74D1F2FEBB09B0050EB2C /* CreateScheduleVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D74D1E2FEBB09B0050EB2C /* CreateScheduleVM.swift */; };
30D87CDB2FDFA9EE00E958FD /* MQTTService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */; }; 30D87CDB2FDFA9EE00E958FD /* MQTTService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */; };
30D87CDD2FDFF07500E958FD /* InteractionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDC2FDFF07500E958FD /* InteractionView.swift */; }; 30D87CDD2FDFF07500E958FD /* InteractionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDC2FDFF07500E958FD /* InteractionView.swift */; };
30D87CDF2FDFF1A100E958FD /* QuickMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */; }; 30D87CDF2FDFF1A100E958FD /* QuickMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */; };
@ -463,6 +466,9 @@
30D74ABC2FEA67EA0050EB2C /* CreateScheduleVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateScheduleVC.swift; sourceTree = "<group>"; }; 30D74ABC2FEA67EA0050EB2C /* CreateScheduleVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateScheduleVC.swift; sourceTree = "<group>"; };
30D74ABE2FEA67F30050EB2C /* CreateScheduleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateScheduleView.swift; sourceTree = "<group>"; }; 30D74ABE2FEA67F30050EB2C /* CreateScheduleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateScheduleView.swift; sourceTree = "<group>"; };
30D74AC02FEA6EEF0050EB2C /* CreateSchedulePopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateSchedulePopView.swift; sourceTree = "<group>"; }; 30D74AC02FEA6EEF0050EB2C /* CreateSchedulePopView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateSchedulePopView.swift; sourceTree = "<group>"; };
30D74BF02FEB6F5B0050EB2C /* LocationPickerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationPickerVC.swift; sourceTree = "<group>"; };
30D74BF12FEB6F5B0050EB2C /* LocationPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationPickerView.swift; sourceTree = "<group>"; };
30D74D1E2FEBB09B0050EB2C /* CreateScheduleVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateScheduleVM.swift; sourceTree = "<group>"; };
30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MQTTService.swift; sourceTree = "<group>"; }; 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MQTTService.swift; sourceTree = "<group>"; };
30D87CDC2FDFF07500E958FD /* InteractionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractionView.swift; sourceTree = "<group>"; }; 30D87CDC2FDFF07500E958FD /* InteractionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractionView.swift; sourceTree = "<group>"; };
30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickMessageView.swift; sourceTree = "<group>"; }; 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickMessageView.swift; sourceTree = "<group>"; };
@ -519,29 +525,21 @@
/* Begin PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFileSystemSynchronizedRootGroup section */
30CCDF8E2FE3E63B00F5214A /* sound */ = { 30CCDF8E2FE3E63B00F5214A /* sound */ = {
isa = PBXFileSystemSynchronizedRootGroup; isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
path = sound; path = sound;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
30CCDF902FE3E63B00F5214A /* video */ = { 30CCDF902FE3E63B00F5214A /* video */ = {
isa = PBXFileSystemSynchronizedRootGroup; isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
path = video; path = video;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
30CCE01E2FE3E64700F5214A /* lotties */ = { 30CCE01E2FE3E64700F5214A /* lotties */ = {
isa = PBXFileSystemSynchronizedRootGroup; isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
path = lotties; path = lotties;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
30D87CEF2FDFF52100E958FD /* TTGTagCollectionView */ = { 30D87CEF2FDFF52100E958FD /* TTGTagCollectionView */ = {
isa = PBXFileSystemSynchronizedRootGroup; isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
path = TTGTagCollectionView; path = TTGTagCollectionView;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@ -1284,6 +1282,7 @@
30D74AB32FEA25B90050EB2C /* ViewedModel.swift */, 30D74AB32FEA25B90050EB2C /* ViewedModel.swift */,
30D74AB92FEA37AD0050EB2C /* ScheduleModel.swift */, 30D74AB92FEA37AD0050EB2C /* ScheduleModel.swift */,
30D74ABB2FEA67CE0050EB2C /* CreateSchedule */, 30D74ABB2FEA67CE0050EB2C /* CreateSchedule */,
30D74BF22FEB6F5B0050EB2C /* LocationPicker */,
); );
path = Schedule; path = Schedule;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1292,12 +1291,22 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
30D74ABC2FEA67EA0050EB2C /* CreateScheduleVC.swift */, 30D74ABC2FEA67EA0050EB2C /* CreateScheduleVC.swift */,
30D74D1E2FEBB09B0050EB2C /* CreateScheduleVM.swift */,
30D74ABE2FEA67F30050EB2C /* CreateScheduleView.swift */, 30D74ABE2FEA67F30050EB2C /* CreateScheduleView.swift */,
30D74AC02FEA6EEF0050EB2C /* CreateSchedulePopView.swift */, 30D74AC02FEA6EEF0050EB2C /* CreateSchedulePopView.swift */,
); );
path = CreateSchedule; path = CreateSchedule;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
30D74BF22FEB6F5B0050EB2C /* LocationPicker */ = {
isa = PBXGroup;
children = (
30D74BF02FEB6F5B0050EB2C /* LocationPickerVC.swift */,
30D74BF12FEB6F5B0050EB2C /* LocationPickerView.swift */,
);
path = LocationPicker;
sourceTree = "<group>";
};
30D87CD52FDF9F1900E958FD /* MQTT */ = { 30D87CD52FDF9F1900E958FD /* MQTT */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -1555,10 +1564,14 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Embed Pods Frameworks"; name = "[CP] Embed Pods Frameworks";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh\"\n";
@ -1572,10 +1585,14 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-resources-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-resources-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Copy Pods Resources"; name = "[CP] Copy Pods Resources";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-resources-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-resources-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-resources.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-resources.sh\"\n";
@ -1611,11 +1628,14 @@
305A76942FCA8C7000227D26 /* UploadImageCell.swift in Sources */, 305A76942FCA8C7000227D26 /* UploadImageCell.swift in Sources */,
305A76952FCA8C7000227D26 /* CornerRadiusCell.swift in Sources */, 305A76952FCA8C7000227D26 /* CornerRadiusCell.swift in Sources */,
305A76962FCA8C7000227D26 /* CornerRadiusFooterView.swift in Sources */, 305A76962FCA8C7000227D26 /* CornerRadiusFooterView.swift in Sources */,
30D74BF32FEB6F5B0050EB2C /* LocationPickerVC.swift in Sources */,
30D74BF42FEB6F5B0050EB2C /* LocationPickerView.swift in Sources */,
30C4C0162FDB91B8009215C1 /* CheckPermissionVC.swift in Sources */, 30C4C0162FDB91B8009215C1 /* CheckPermissionVC.swift in Sources */,
305A76972FCA8C7000227D26 /* CornerRadiusHeaderView.swift in Sources */, 305A76972FCA8C7000227D26 /* CornerRadiusHeaderView.swift in Sources */,
305A76982FCA8C7000227D26 /* ImagePicker.swift in Sources */, 305A76982FCA8C7000227D26 /* ImagePicker.swift in Sources */,
305A76992FCA8C7000227D26 /* ImagePickerPopup.swift in Sources */, 305A76992FCA8C7000227D26 /* ImagePickerPopup.swift in Sources */,
30EFF3E22FDA9DEE00EB35D4 /* EmergencyContactVM.swift in Sources */, 30EFF3E22FDA9DEE00EB35D4 /* EmergencyContactVM.swift in Sources */,
30D74D1F2FEBB09B0050EB2C /* CreateScheduleVM.swift in Sources */,
305A769A2FCA8C7000227D26 /* PopupAnimator.swift in Sources */, 305A769A2FCA8C7000227D26 /* PopupAnimator.swift in Sources */,
3062E8BE2FCEBD0E00CEF511 /* GroupIconListVC.swift in Sources */, 3062E8BE2FCEBD0E00CEF511 /* GroupIconListVC.swift in Sources */,
30EFF3DA2FDA935D00EB35D4 /* EmergencyContactFooterView.swift in Sources */, 30EFF3DA2FDA935D00EB35D4 /* EmergencyContactFooterView.swift in Sources */,

View File

@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group_2289@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group_2289@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

View File

@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "Group_1584@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "Group_1584@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -12,6 +12,7 @@ import SwiftyUserDefaults
extension DefaultsKeys { extension DefaultsKeys {
/// ///
var currentLatitude: DefaultsKey<Double?> { .init("currentLatitude") } var currentLatitude: DefaultsKey<Double?> { .init("currentLatitude") }
var currentLongitude: DefaultsKey<Double?> { .init("currentLongitude") }
/// ///
var updateLocationEnable: DefaultsKey<Bool> { .init("updateLocationEnable", defaultValue: true) } var updateLocationEnable: DefaultsKey<Bool> { .init("updateLocationEnable", defaultValue: true) }
/// ///

View File

@ -345,3 +345,15 @@ extension UIView {
return dateString return dateString
} }
} }
extension UIView {
var parentViewController: UIViewController? {
var responder: UIResponder? = self
while let next = responder?.next {
if let vc = next as? UIViewController { return vc }
responder = next
}
return nil
}
}

View File

@ -45,7 +45,7 @@ class HomeView: UIView {
// MARK: - Map // MARK: - Map
#if !targetEnvironment(simulator) #if !targetEnvironment(simulator)
lazy var mapView: MAMapView = { lazy var mapView: MAMapView! = {
let mv = MAMapView() let mv = MAMapView()
mv.zoomLevel = 16 mv.zoomLevel = 16
mv.showsUserLocation = true mv.showsUserLocation = true

View File

@ -417,7 +417,8 @@ class HomeViewController: BaseViewController {
// members 线 // members 线
let onlineMembers = newMembers.filter { $0.isOnline } let onlineMembers = newMembers.filter { $0.isOnline }
let mapView = rootView.mapView guard let mapView = rootView.mapView else { return }
let existing = mapView.annotations?.compactMap { $0 as? MemberAnnotation } ?? [] let existing = mapView.annotations?.compactMap { $0 as? MemberAnnotation } ?? []
let existingIDs = Set(existing.map { $0.member.id }) let existingIDs = Set(existing.map { $0.member.id })
let onlineIDs = Set(onlineMembers.map { $0.id }) let onlineIDs = Set(onlineMembers.map { $0.id })
@ -660,7 +661,7 @@ extension HomeViewController {
/// ///
private func removeAnnotation(userId: String) { private func removeAnnotation(userId: String) {
#if !targetEnvironment(simulator) #if !targetEnvironment(simulator)
let mapView = rootView.mapView guard let mapView = rootView.mapView else { return }
let toRemove = mapView.annotations?.compactMap({ $0 as? MemberAnnotation }).filter { $0.member.id == userId } let toRemove = mapView.annotations?.compactMap({ $0 as? MemberAnnotation }).filter { $0.member.id == userId }
if let remove = toRemove, !remove.isEmpty { if let remove = toRemove, !remove.isEmpty {
mapView.removeAnnotations(remove) mapView.removeAnnotations(remove)
@ -684,7 +685,7 @@ extension HomeViewController {
} }
// //
let mapView = rootView.mapView guard let mapView = rootView.mapView else { return }
if let oldMember = members.first(where: { $0.id == userId }), oldMember.isOnline { if let oldMember = members.first(where: { $0.id == userId }), oldMember.isOnline {
// //
let toRemove = mapView.annotations?.compactMap({ $0 as? MemberAnnotation }).filter { $0.member.id == userId } let toRemove = mapView.annotations?.compactMap({ $0 as? MemberAnnotation }).filter { $0.member.id == userId }
@ -738,6 +739,8 @@ extension HomeViewController: MAMapViewDelegate {
// //
lastLocation = location lastLocation = location
Defaults[\.currentLatitude] = location.coordinate.latitude
Defaults[\.currentLongitude] = location.coordinate.longitude
let coordinate = location.coordinate let coordinate = location.coordinate
guard CLLocationCoordinate2DIsValid(coordinate) else { return } guard CLLocationCoordinate2DIsValid(coordinate) else { return }

View File

@ -44,6 +44,15 @@ class NavigationVC: BaseViewController {
rootView = NavigationView(frame: UIScreen.main.bounds) rootView = NavigationView(frame: UIScreen.main.bounds)
view = rootView view = rootView
} }
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// pop/dismiss
if isMovingFromParent || isBeingDismissed {
#if !targetEnvironment(simulator)
rootView.cleanupMap()
#endif
}
}
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()

View File

@ -156,7 +156,7 @@ class NavigationView: UIView {
}() }()
#if !targetEnvironment(simulator) #if !targetEnvironment(simulator)
lazy var mapView: MAMapView = { lazy var mapView: MAMapView! = {
let mv = MAMapView() let mv = MAMapView()
mv.zoomLevel = 14 mv.zoomLevel = 14
mv.showsUserLocation = false mv.showsUserLocation = false
@ -245,6 +245,15 @@ class NavigationView: UIView {
return label return label
}() }()
#if !targetEnvironment(simulator)
func cleanupMap() {
mapView?.delegate = nil
mapView?.removeFromSuperview()
mapView = nil
}
#endif
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
backgroundColor = .clear backgroundColor = .clear

View File

@ -10,99 +10,26 @@ import RxSwift
import RxCocoa import RxCocoa
import RxDataSources import RxDataSources
import BRPickerView import BRPickerView
import RxGesture
// MARK: - import CoreLocation
struct SchedulePointItem: IdentifiableType, Equatable { import TagListView
let identity: String = UUID().uuidString
var locationName: String = ""
var address: String = ""
var expectedTime: Date?
var remark: String = ""
}
typealias SchedulePointSection = SectionModel<String, SchedulePointItem>
// MARK: - CreateSchedulePopView // MARK: - CreateSchedulePopView
class CreateSchedulePopView: UIView { class CreateSchedulePopView: UIView {
var disposeBag = DisposeBag() var disposeBag = DisposeBag()
let pointsRelay = BehaviorRelay<[SchedulePointItem]>(value: [SchedulePointItem()]) func setupTagData(_ list: [GroupInfoModel]) {
let nameArr = list.map { $0.name }
// MARK: - Setup tagListView.removeAllTags()
tagListView.addTags(nameArr)
private func setupRx() { tagListView.tagViews.forEach {
dateLab.rx.tapGesture.subscribe { _ in $0.layer.cornerRadius = 4
let picker = BRDatePickerView(pickerMode: .YMD) }
picker.minDate = Date() tagListView.invalidateIntrinsicContentSize() //
picker.maxDate = Calendar.current.date(byAdding: .day, value: 6, to: Date())
let style = BRPickerStyle()
style.selectRowTextColor = UIColor(hexStr: "#16B3FF")
picker.pickerStyle = style
picker.resultBlock = { [weak self] selectDate, value in
guard let date = selectDate else { return }
let fmt = DateFormatter()
fmt.dateFormat = "yyyy年MM月dd日"
self?.dateLab.text = fmt.string(from: date)
}
picker.show()
}.disposed(by: disposeBag)
//
addBtn.rx.tap
.subscribe(onNext: { [weak self] _ in
guard let self = self else { return }
var list = self.pointsRelay.value
list.append(SchedulePointItem(
locationName: "",
address: "",
expectedTime: nil,
remark: ""
))
self.pointsRelay.accept(list)
})
.disposed(by: disposeBag)
// tableView
pointsRelay
.observe(on: MainScheduler.asyncInstance)
.map { [SchedulePointSection(model: "", items: $0)] }
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
// tableView
pointsRelay
.subscribe(onNext: { [weak self] items in
guard let self = self else { return }
let rowHeight: CGFloat = 122
var h = CGFloat(items.count) * rowHeight
h = max(h, rowHeight)
self.tableView.layoutChain.height(h)
})
.disposed(by: disposeBag)
} }
private lazy var dataSource: RxTableViewSectionedReloadDataSource<SchedulePointSection> = {
RxTableViewSectionedReloadDataSource<SchedulePointSection>(
configureCell: { [weak self] _, tv, indexPath, item in
let cell: SchedulePointCell = tv.dequeueReusableCell(for: indexPath)
cell.configure(item: item,
index: indexPath.row,
total: self?.pointsRelay.value.count ?? 0,
onDelete: { [weak self] in
guard let self = self else { return }
var list = self.pointsRelay.value
guard indexPath.row < list.count else { return }
list.remove(at: indexPath.row)
self.pointsRelay.accept(list)
})
return cell
})
}()
// MARK: - UI // MARK: - UI
private func setupUI() { private func setupUI() {
addSubview(lineView) addSubview(lineView)
addSubview(dateView) addSubview(dateView)
@ -182,7 +109,7 @@ class CreateSchedulePopView: UIView {
let btn = UIButton(type: .custom) let btn = UIButton(type: .custom)
btn.setImage(UIImage(named: "Schedule/add"), for: .normal) btn.setImage(UIImage(named: "Schedule/add"), for: .normal)
btn.backgroundColor = .clear btn.backgroundColor = .clear
btn.extendEdgeInsets = UIEdgeInsets(top: 30, left: 10, bottom: 10, right: 15) btn.extendEdgeInsets = UIEdgeInsets(top: 30, left: 30, bottom: 10, right: 15)
return btn return btn
}() }()
@ -191,6 +118,7 @@ class CreateSchedulePopView: UIView {
view.backgroundColor = .white view.backgroundColor = .white
view.showsHorizontalScrollIndicator = false view.showsHorizontalScrollIndicator = false
view.bounces = false view.bounces = false
view.delaysContentTouches = false
let contentView = UIView() let contentView = UIView()
contentView.backgroundColor = .clear contentView.backgroundColor = .clear
@ -203,9 +131,14 @@ class CreateSchedulePopView: UIView {
.top() .top()
.edgesHorzontal() .edgesHorzontal()
contentView.addSubview(shareGroupView)
shareGroupView.layoutChain
.topToBottomOfView(tableView, offset: 5)
.edgesHorzontal()
contentView.addSubview(createBtn) contentView.addSubview(createBtn)
createBtn.layoutChain createBtn.layoutChain
.topToBottomOfView(tableView, offset: 30) .topToBottomOfView(shareGroupView, offset: 30)
.edgesHorzontal(30) .edgesHorzontal(30)
.height(50) .height(50)
.bottom(kSafeBottomMargin + 10) .bottom(kSafeBottomMargin + 10)
@ -225,6 +158,42 @@ class CreateSchedulePopView: UIView {
return tv return tv
}() }()
///
lazy var shareGroupView: UIView = {
let view = UIView()
view.backgroundColor = .clear
let titleLab = UILabel()
titleLab.text = "选择分享的圈子"
titleLab.font = .systemFont(ofSize: 14, weight: .medium)
titleLab.textColor = ThemeManager.shared.color.titleAuxColor
view.addSubview(titleLab)
titleLab.layoutChain.left(15).top()
view.addSubview(tagListView)
tagListView.layoutChain
.topToBottomOfView(titleLab, offset: 15)
.edgesHorzontal(15)
.bottom(15)
return view
}()
lazy var tagListView: TagListView = {
let view = TagListView()
view.textFont = UIFont.systemFont(ofSize: 12, weight: .medium)
view.textColor = UIColor(hexStr: "#999999")
view.tagBackgroundColor = UIColor(hexStr: "#F2F2F2")
view.selectedTextColor = UIColor(hexStr: "#16B3FF")
view.tagSelectedBackgroundColor = UIColor(hexStr: "#E3F6FF")
view.selectedBorderColor = UIColor(hexStr: "#16B3FF")
view.paddingX = 15 //
view.paddingY = 10 //
view.alignment = .left //
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
lazy var createBtn: UIButton = { lazy var createBtn: UIButton = {
let btn = UIButton(type: .custom) let btn = UIButton(type: .custom)
btn.setTitle("立即创建", for: .normal) btn.setTitle("立即创建", for: .normal)
@ -239,7 +208,6 @@ class CreateSchedulePopView: UIView {
super.init(frame: frame) super.init(frame: frame)
backgroundColor = .white backgroundColor = .white
setupUI() setupUI()
setupRx()
} }
required init?(coder: NSCoder) { required init?(coder: NSCoder) {
@ -253,23 +221,40 @@ class CreateSchedulePopView: UIView {
} }
} }
// MARK: - SchedulePointCell // MARK: - SchedulePointCell
class SchedulePointCell: UITableViewCell { class SchedulePointCell: UITableViewCell {
var disposeBag = DisposeBag() var disposeBag = DisposeBag()
var onLocationTap: (() -> Void)?
var onTimeTap: (() -> Void)?
func configure(item: SchedulePointItem, index: Int, total: Int, onDelete: @escaping () -> Void) { func configure(item: SchedulePointItem, index: Int, total: Int, onDelete: @escaping () -> Void) {
disposeBag = DisposeBag() disposeBag = DisposeBag()
indexLabel.text = "\(index + 1)" indexLabel.text = "\(index + 1)"
locationLabel.text = item.locationName.isEmpty ? "点击选择地点" : item.locationName locationLabel.text = item.locationName.isEmpty ? "点击选择地点" : item.locationName
locationLabel.rx.tapGesture
.when(.recognized)
.subscribe(onNext: { [weak self] _ in
self?.onLocationTap?()
})
.disposed(by: disposeBag)
if let expectedTime = item.expectedTime { if let expectedTime = item.expectedTime {
timeLabel.text = formatTime(expectedTime) timeLabel.text = formatTime(expectedTime)
} } else {
else {
timeLabel.text = "请选择到达时间" timeLabel.text = "请选择到达时间"
} }
timeLabel.rx.tapGesture
.when(.recognized)
.subscribe(onNext: { [weak self] _ in
self?.onTimeTap?()
})
.disposed(by: disposeBag)
// 线线 // 线线
topDashView.isHidden = total <= 1 || index == 0 topDashView.isHidden = total <= 1 || index == 0
@ -334,7 +319,7 @@ class SchedulePointCell: UITableViewCell {
.top(15) .top(15)
.leftToRightOfView(pointIcon, offset: 20) .leftToRightOfView(pointIcon, offset: 20)
.right(15) .right(15)
.height(92) // .height(92)
.bottom(15) .bottom(15)
cardCornerView.layoutChain.edges() cardCornerView.layoutChain.edges()
@ -346,19 +331,26 @@ class SchedulePointCell: UITableViewCell {
locationLabel.layoutChain locationLabel.layoutChain
.topToBottomOfView(indexLabel, offset: 10) .topToBottomOfView(indexLabel, offset: 10)
.left(10) .left(10)
.compressionHorizontal(.defaultLow)
timeLabel.layoutChain timeLabel.layoutChain
.centerY(locationLabel) .topToView(locationLabel)
.leftToRightOfView(locationLabel, offset: 38) .right(10)
.compressionHorizontal(.required)
locationLabel.layoutChain.rightToLeftOfView(timeLabel, offset: -8)
deleteBtn.layoutChain deleteBtn.layoutChain
.bottom(15).right(15) .right(15)
.width(14).height(14) .width(14).height(14)
remarkTF.layoutChain remarkTF.layoutChain
.topToBottomOfView(locationLabel, offset: 15) .topToBottomOfView(locationLabel, offset: 15)
.leftToView(locationLabel) .leftToView(locationLabel)
.rightToLeftOfView(deleteBtn, offset: -10) .rightToLeftOfView(deleteBtn, offset: -10)
.bottom(15)
deleteBtn.layoutChain.centerY(remarkTF)
} }
// MARK: - Views // MARK: - Views
@ -412,7 +404,7 @@ class SchedulePointCell: UITableViewCell {
let l = UILabel() let l = UILabel()
l.font = .systemFont(ofSize: 14, weight: .medium) l.font = .systemFont(ofSize: 14, weight: .medium)
l.textColor = UIColor(hexStr: "#333333") l.textColor = UIColor(hexStr: "#333333")
l.lineBreakMode = .byTruncatingTail // l.numberOfLines = 0
return l return l
}() }()
@ -421,6 +413,7 @@ class SchedulePointCell: UITableViewCell {
l.font = .systemFont(ofSize: 12, weight: .medium) l.font = .systemFont(ofSize: 12, weight: .medium)
l.textColor = UIColor(hexStr: "#333333") l.textColor = UIColor(hexStr: "#333333")
l.isUserInteractionEnabled = true l.isUserInteractionEnabled = true
l.textAlignment = .right
return l return l
}() }()

View File

@ -6,31 +6,403 @@
// //
import UIKit import UIKit
import RxSwift
import RxCocoa
import RxDataSources
import SwiftyUserDefaults
import BRPickerView
import RxGesture
class CreateScheduleVC: BaseViewController { #if !targetEnvironment(simulator)
import AMapNaviKit
import AMapSearchKit
import TagListView
#endif
class CreateScheduleVC: BaseViewController, MAMapViewDelegate {
override var isNavigationBarHidden: Bool { true }
fileprivate var rootView: CreateScheduleView! fileprivate var rootView: CreateScheduleView!
private let viewModel = CreateScheduleVM()
private var popView: CreateSchedulePopView { rootView.createSchedulePopView }
override func loadView() { override func loadView() {
rootView = CreateScheduleView(frame: UIScreen.main.bounds) rootView = CreateScheduleView(frame: UIScreen.main.bounds)
view = rootView view = rootView
} }
private var groupList: [GroupInfoModel] = []
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
popView.tagListView.delegate = self
setupMap()
bindViewModel()
// Do any additional setup after loading the view. requestGroupInfo()
} }
override func viewDidDisappear(_ animated: Bool) {
/* super.viewDidDisappear(animated)
// MARK: - Navigation if isMovingFromParent || isBeingDismissed {
#if !targetEnvironment(simulator)
// In a storyboard-based application, you will often want to do a little preparation before navigation rootView.cleanupMap()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { #endif
// Get the new view controller using segue.destination. }
// Pass the selected object to the new view controller.
} }
*/
// MARK: - API
private func requestGroupInfo() {
GroupService.groupInfo().subscribe { response in
guard let model = response.model else { return }
self.groupList = model.groups
self.popView.setupTagData(model.groups)
}.disposed(by: disposeBag)
}
// MARK: - Binding
private lazy var dataSource: RxTableViewSectionedReloadDataSource<SchedulePointSection> = {
RxTableViewSectionedReloadDataSource<SchedulePointSection>(
configureCell: { [weak self] _, tv, indexPath, item in
let cell: SchedulePointCell = tv.dequeueReusableCell(for: indexPath)
cell.onTimeTap = { [weak self] in
guard let self = self else { return }
let picker = BRDatePickerView(pickerMode: .HM)
picker.title = "选择到达时间"
let style = BRPickerStyle()
style.selectRowTextColor = UIColor(hexStr: "#16B3FF")
picker.pickerStyle = style
picker.resultBlock = { date, _ in
guard let d = date else { return }
var list = self.viewModel.pointsRelay.value
guard indexPath.row < list.count else { return }
// +
let cal = Calendar.current
let today = Date()
var comps = cal.dateComponents([.year, .month, .day], from: today)
let timeComps = cal.dateComponents([.hour, .minute], from: d)
comps.hour = timeComps.hour
comps.minute = timeComps.minute
if let merged = cal.date(from: comps) {
list[indexPath.row].expectedTime = merged
self.viewModel.pointsRelay.accept(list)
}
}
picker.show()
}
cell.onLocationTap = { [weak self] in
guard let self = self else { return }
let coord = item.latitude != 0 || item.longitude != 0
? CLLocationCoordinate2D(latitude: item.latitude, longitude: item.longitude)
: kCLLocationCoordinate2DInvalid
let vc = LocationPickerVC()
vc.modalPresentationStyle = .fullScreen
if !item.locationName.isEmpty {
vc.initialLocation = PickedLocation(
name: item.locationName, address: item.address,
coordinate: coord,
province: item.province, city: item.city,
district: item.district, street: item.street,
country: item.country, formatted_address: item.formatted_address
)
}
vc.onPickedLocation = { picked in
self.viewModel.updatePointLocation(index: indexPath.row, name: picked.name, address: picked.address)
//
var list = self.viewModel.pointsRelay.value
guard indexPath.row < list.count else { return }
list[indexPath.row].latitude = picked.coordinate.latitude
list[indexPath.row].longitude = picked.coordinate.longitude
self.viewModel.pointsRelay.accept(list)
}
self.present(vc, animated: true)
}
cell.configure(item: item, index: indexPath.row,
total: self?.viewModel.pointsRelay.value.count ?? 0,
onDelete: { [weak self] in
self?.viewModel.deletePointAt.onNext(indexPath.row)
})
return cell
})
}()
fileprivate func bindViewModel() {
//
viewModel.dateString
.bind(to: popView.dateLab.rx.text)
.disposed(by: disposeBag)
// tableView
viewModel.pointsRelay
.map { [SchedulePointSection(model: "", items: $0)] }
.bind(to: popView.tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
// + 线
viewModel.pointsRelay
.observe(on: MainScheduler.asyncInstance)
.subscribe(onNext: { [weak self] items in
guard let self = self else { return }
let h = max(CGFloat(items.count) * 122, 122)
self.popView.tableView.layoutChain.height(h)
self.refreshMapPoints()
})
.disposed(by: disposeBag)
//
popView.addBtn.rx.tap
.bind(to: viewModel.addPointTapped)
.disposed(by: disposeBag)
//
popView.dateLab.rx.tapGesture
.when(.recognized)
.subscribe(onNext: { [weak self] _ in
self?.showDatePicker()
})
.disposed(by: disposeBag)
//
popView.createBtn.rx.tap
.subscribe(onNext: { [weak self] _ in
self?.handleCreate()
})
.disposed(by: disposeBag)
}
private func handleCreate() {
let points = viewModel.pointsRelay.value
let hasLocation = points.filter { $0.latitude != 0 || $0.longitude != 0 }
let hasTime = points.filter { $0.expectedTime != nil }
//
guard points.count >= 2 else { DLToast.show(text: "至少需要两个行程点"); return }
guard hasLocation.count == points.count else { DLToast.show(text: "请为每个行程点选择地点"); return }
guard hasTime.count == points.count else { DLToast.show(text: "请为每个行程点选择到达时间"); return }
guard !viewModel.selectedGroupKeys.isEmpty else { DLToast.show(text: "请选择分享的圈子"); return }
//
let ts = Int64(viewModel.selectedDate.value.timeIntervalSince1970 * 1000)
// points
let pointsJSON: [[String: Any]] = points.map { p in
let expectedTs = p.expectedTime.map { Int64($0.timeIntervalSince1970 * 1000) } ?? 0
return [
"point": ["lat": p.latitude, "lng": p.longitude],
"address": [
"formatted_address": p.formatted_address,
"country": p.country,
"province": p.province,
"city": p.city,
"district": p.district,
"street": p.street
],
"expected_timestamp": expectedTs,
"remark": p.remark
]
}
let params: [String: Any] = [
"group_keys": viewModel.selectedGroupKeys,
"timestamp": ts,
"points": pointsJSON
]
print("📋 Create schedule: \(params)")
DLToast.show(text: "创建成功")
}
private func setupMap() {
#if !targetEnvironment(simulator)
rootView.mapView.delegate = self
rootView.mapView.showsUserLocation = false
if let lat = Defaults[\.currentLatitude], let lon = Defaults[\.currentLongitude] {
let coord = CLLocationCoordinate2D(latitude: lat, longitude: lon)
if CLLocationCoordinate2DIsValid(coord) {
rootView.mapView.setCenter(coord, animated: false)
rootView.mapView.setZoomLevel(18, animated: false)
}
}
#endif
}
// MARK: - Date Picker
private func showDatePicker() {
let picker = BRDatePickerView(pickerMode: .YMD)
picker.minDate = Date()
picker.maxDate = Calendar.current.date(byAdding: .day, value: 7, to: Date())
let style = BRPickerStyle()
style.selectRowTextColor = UIColor(hexStr: "#16B3FF")
picker.pickerStyle = style
picker.resultBlock = { [weak self] date, _ in
if let d = date { self?.viewModel.selectedDate.accept(d) }
}
picker.show()
}
// MARK: - 线
#if !targetEnvironment(simulator)
private let routeSearch = AMapSearchAPI()
#endif
private var routeOverlays: [MAPolyline] = []
private var pointAnnotations: [MAPointAnnotation] = []
/// refreshMapPoints
private var pendingRoutePoints: [CLLocationCoordinate2D] = []
private func refreshMapPoints() {
let points = viewModel.pointsRelay.value
#if !targetEnvironment(simulator)
routeSearch?.delegate = self
// 线
for ann in pointAnnotations { rootView.mapView.removeAnnotation(ann) }
for ol in routeOverlays { rootView.mapView.remove(ol) }
pointAnnotations.removeAll()
routeOverlays.removeAll()
//
let validPoints = points.filter { $0.latitude != 0 || $0.longitude != 0 }
for (i, p) in validPoints.enumerated() {
let ann = MAPointAnnotation()
ann.coordinate = CLLocationCoordinate2D(latitude: p.latitude, longitude: p.longitude)
ann.title = "\(i + 1)"
rootView.mapView.addAnnotation(ann)
pointAnnotations.append(ann)
}
// 线
if validPoints.count >= 2 {
pendingRoutePoints = validPoints.map { CLLocationCoordinate2D(latitude: $0.latitude, longitude: $0.longitude) }
requestRoute()
}
//
let lats = validPoints.map { $0.latitude }
let lons = validPoints.map { $0.longitude }
if let minLat = lats.min(), let maxLat = lats.max(),
let minLon = lons.min(), let maxLon = lons.max() {
let center = CLLocationCoordinate2D(latitude: (minLat + maxLat) / 2, longitude: (minLon + maxLon) / 2)
let span = MACoordinateSpan(latitudeDelta: (maxLat - minLat) * 2.5 + 0.01, longitudeDelta: (maxLon - minLon) * 2.5 + 0.01)
rootView.mapView.setRegion(MACoordinateRegion(center: center, span: span), animated: true)
}
#endif
}
#if !targetEnvironment(simulator)
private func requestRoute() {
guard pendingRoutePoints.count >= 2 else { return }
let request = AMapDrivingRouteSearchRequest()
request.origin = AMapGeoPoint.location(withLatitude: CGFloat(pendingRoutePoints[0].latitude), longitude: CGFloat(pendingRoutePoints[0].longitude))
request.destination = AMapGeoPoint.location(withLatitude: CGFloat(pendingRoutePoints.last!.latitude), longitude: CGFloat(pendingRoutePoints.last!.longitude))
//
if pendingRoutePoints.count > 2 {
var waypoints: [AMapGeoPoint] = []
for i in 1..<pendingRoutePoints.count - 1 {
let p = pendingRoutePoints[i]
if let wp = AMapGeoPoint.location(withLatitude: CGFloat(p.latitude), longitude: CGFloat(p.longitude)) {
waypoints.append(wp)
}
}
request.waypoints = waypoints
}
request.strategy = 0
// request.city = ""
routeSearch?.aMapDrivingRouteSearch(request)
}
#endif
///
private static func numberImage(_ num: Int) -> UIImage? {
let size = CGSize(width: 20, height: 20)
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
guard let ctx = UIGraphicsGetCurrentContext() else { return nil }
//
ctx.setLineWidth(1)
ctx.setStrokeColor(UIColor.white.cgColor)
//
ctx.setFillColor(UIColor(hexStr: "#16B3FF").cgColor)
let path = UIBezierPath(ovalIn: rect)
path.fill()
path.stroke()
//
let text = "\(num)" as NSString
let attrs: [NSAttributedString.Key: Any] = [.font: UIFont.boldSystemFont(ofSize: 11), .foregroundColor: UIColor.white]
let strSize = text.size(withAttributes: attrs)
text.draw(at: CGPoint(x: (size.width - strSize.width) / 2, y: (size.height - strSize.height) / 2))
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img
}
// MARK: - Map
func mapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! {
guard !(annotation is MAUserLocation), let pointAnn = annotation as? MAPointAnnotation else { return nil }
if let num = Int(pointAnn.title ?? "") {
let id = "PointPin"
var view = mapView.dequeueReusableAnnotationView(withIdentifier: id)
if view == nil { view = MAAnnotationView(annotation: annotation, reuseIdentifier: id) }
else { view?.annotation = annotation }
view?.image = Self.numberImage(num)
view?.centerOffset = CGPoint(x: 0, y: -15)
return view
}
return nil
}
func mapView(_ mapView: MAMapView!, rendererFor overlay: MAOverlay!) -> MAOverlayRenderer! {
if let polyline = overlay as? MAPolyline {
let r = MAPolylineRenderer(polyline: polyline)
r?.strokeColor = UIColor(hexStr: "#16B3FF")
r?.lineWidth = 3
r?.lineDashType = kMALineDashTypeSquare
return r
}
return nil
}
} }
// MARK: - TagListViewDelegate
extension CreateScheduleVC: TagListViewDelegate {
func tagPressed(_ title: String, tagView: TagView, sender: TagListView) {
tagView.isSelected = !tagView.isSelected
// tagView tagViews group_key
guard let idx = sender.tagViews.firstIndex(of: tagView),
idx < groupList.count else { return }
let key = groupList[idx].group_key
viewModel.toggleGroupKey(key)
print("📋 selectedGroupKeys: \(viewModel.selectedGroupKeys)")
}
}
#if !targetEnvironment(simulator)
// MARK: - AMapSearchDelegate
extension CreateScheduleVC: AMapSearchDelegate {
func onRouteSearchDone(_ request: AMapRouteSearchBaseRequest!, response: AMapRouteSearchResponse!) {
guard let path = response.route?.paths?.first as? AMapPath else { return }
var coords: [CLLocationCoordinate2D] = []
for step in path.steps {
guard let polylineStr = step.polyline else { continue }
for point in polylineStr.components(separatedBy: ";") {
let latLon = point.components(separatedBy: ",")
if latLon.count == 2, let lon = Double(latLon[0]), let lat = Double(latLon[1]) {
coords.append(CLLocationCoordinate2D(latitude: lat, longitude: lon))
}
}
}
guard coords.count > 1 else { return }
var mutableCoords = coords
if let polyline = MAPolyline(coordinates: &mutableCoords, count: UInt(coords.count)) {
rootView.mapView.add(polyline)
routeOverlays.append(polyline)
}
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
print("Route error: \(error.localizedDescription)")
}
}
#endif

View File

@ -0,0 +1,114 @@
//
// CreateScheduleVM.swift
// QuickLocation
//
// Created by on 2026/6/24.
//
import RxSwift
import RxCocoa
import RxDataSources
// MARK: -
struct SchedulePointItem: IdentifiableType, Equatable {
let identity: String = UUID().uuidString
var locationName: String = ""
var address: String = ""
var latitude: Double = 0
var longitude: Double = 0
var province: String = ""
var city: String = ""
var district: String = ""
var street: String = ""
var country: String = ""
var formatted_address: String = ""
var expectedTime: Date?
var remark: String = ""
}
typealias SchedulePointSection = SectionModel<String, SchedulePointItem>
class CreateScheduleVM {
let disposeBag = DisposeBag()
// MARK: - Input
let addPointTapped = PublishSubject<Void>()
let deletePointAt = PublishSubject<Int>()
let updatePoint = PublishSubject<(index: Int, item: SchedulePointItem)>()
let selectedDate = BehaviorRelay<Date>(value: Date())
var selectedGroupKeys: [String] = []
///
func toggleGroupKey(_ key: String) {
if let idx = selectedGroupKeys.firstIndex(of: key) {
selectedGroupKeys.remove(at: idx)
} else {
selectedGroupKeys.append(key)
}
}
/// key
func removeGroupKey(_ key: String) {
selectedGroupKeys.removeAll { $0 == key }
}
// MARK: - Output
let pointsRelay: BehaviorRelay<[SchedulePointItem]>
let dateString: Observable<String>
init() {
pointsRelay = BehaviorRelay<[SchedulePointItem]>(value: [
SchedulePointItem()
])
dateString = selectedDate
.map {
let fmt = DateFormatter()
fmt.dateFormat = "yyyy年MM月dd日"
return fmt.string(from: $0)
}
//
addPointTapped
.withLatestFrom(pointsRelay)
.map { list in
var new = list
new.append(SchedulePointItem())
return new
}
.bind(to: pointsRelay)
.disposed(by: disposeBag)
//
deletePointAt
.withLatestFrom(pointsRelay) { ($1, $0) }
.subscribe(onNext: { list, idx in
guard list.count > 1, idx < list.count else { return }
var new = list
new.remove(at: idx)
self.pointsRelay.accept(new)
})
.disposed(by: disposeBag)
//
updatePoint
.withLatestFrom(pointsRelay) { ($1, $0) }
.subscribe(onNext: { list, update in
guard update.index < list.count else { return }
var new = list
new[update.index] = update.item
self.pointsRelay.accept(new)
})
.disposed(by: disposeBag)
}
/// LocationPicker
func updatePointLocation(index: Int, name: String, address: String) {
var list = pointsRelay.value
guard index < list.count else { return }
list[index].locationName = name
list[index].address = address
pointsRelay.accept(list)
}
}

View File

@ -31,18 +31,12 @@ class CreateScheduleView: UIView {
AppRouter.shared.popOrDismiss() AppRouter.shared.popOrDismiss()
}).disposed(by: disposeBag) }).disposed(by: disposeBag)
// tableView PopView pan // scrollView pan PopView
createSchedulePopView.scrollView.rx.contentOffset createSchedulePopView.scrollView.rx.contentOffset
.observe(on: MainScheduler.asyncInstance)
.subscribe(onNext: { [weak self] offset in .subscribe(onNext: { [weak self] offset in
guard let self = self else { return } guard let self = self, self.isSubCanScroll, offset.y <= 0 else { return }
if self.isSubCanScroll { self.createSchedulePopView.scrollView.setContentOffset(.zero, animated: false)
if offset.y <= 0 {
self.isSubCanScroll = false
self.createSchedulePopView.scrollView.setContentOffset(.zero, animated: false)
}
} else if offset.y != 0 {
self.createSchedulePopView.scrollView.setContentOffset(.zero, animated: false)
}
}) })
.disposed(by: disposeBag) .disposed(by: disposeBag)
} }
@ -110,10 +104,10 @@ class CreateScheduleView: UIView {
let newTop = panStartTop + pan.translation(in: self).y let newTop = panStartTop + pan.translation(in: self).y
if isSubCanScroll { if isSubCanScroll {
let tableViewOffset = self.createSchedulePopView.scrollView.contentOffset.y let scrollOffset = self.createSchedulePopView.scrollView.contentOffset.y
if tableViewOffset > 0, newTop >= popUpLimit { // scrollView
return if scrollOffset > 0 { return }
} // view
isSubCanScroll = false isSubCanScroll = false
panStartTop = createSchedulePopView.frame.minY panStartTop = createSchedulePopView.frame.minY
} }
@ -132,15 +126,16 @@ class CreateScheduleView: UIView {
} }
topConstraint.constant = target topConstraint.constant = target
// scollView
let atTop = target == self.popUpLimit
createSchedulePopView.scrollView.isScrollEnabled = atTop
if !atTop {
createSchedulePopView.scrollView.setContentOffset(.zero, animated: false)
}
UIView.animate(withDuration: 0.2, delay: 0, UIView.animate(withDuration: 0.2, delay: 0,
options: [.curveEaseInOut, .allowUserInteraction]) { options: [.curveEaseInOut, .allowUserInteraction]) {
self.layoutIfNeeded() self.layoutIfNeeded()
} completion: { _ in
let atTop = target == self.popUpLimit
self.isSubCanScroll = atTop
if !atTop {
self.createSchedulePopView.scrollView.contentOffset.y = 0
}
} }
default: default:
@ -154,6 +149,7 @@ class CreateScheduleView: UIView {
isLimitsSet = true isLimitsSet = true
popDownLimit = kScreenHeight / 3 * 2 popDownLimit = kScreenHeight / 3 * 2
popUpLimit = navBarView.frame.maxY popUpLimit = navBarView.frame.maxY
createSchedulePopView.scrollView.isScrollEnabled = false
} }
} }
@ -187,7 +183,7 @@ class CreateScheduleView: UIView {
}() }()
#if !targetEnvironment(simulator) #if !targetEnvironment(simulator)
lazy var mapView: MAMapView = { lazy var mapView: MAMapView! = {
let mv = MAMapView() let mv = MAMapView()
mv.zoomLevel = 14 mv.zoomLevel = 14
mv.showsUserLocation = false mv.showsUserLocation = false
@ -197,6 +193,15 @@ class CreateScheduleView: UIView {
}() }()
#endif #endif
#if !targetEnvironment(simulator)
func cleanupMap() {
mapView?.delegate = nil
mapView?.removeFromSuperview()
mapView = nil
}
#endif
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
backgroundColor = .clear backgroundColor = .clear
@ -210,6 +215,27 @@ class CreateScheduleView: UIView {
} }
// MARK: - UIScrollViewDelegate
extension CreateScheduleView: UIScrollViewDelegate {
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
//
if scrollView.contentOffset.y > 0 {
isSubCanScroll = true
}
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if isSubCanScroll {
if scrollView.contentOffset.y <= 0 {
isSubCanScroll = false
scrollView.contentOffset.y = 0
}
} else {
scrollView.contentOffset.y = 0
}
}
}
// MARK: - UIGestureRecognizerDelegate // MARK: - UIGestureRecognizerDelegate
extension CreateScheduleView: UIGestureRecognizerDelegate { extension CreateScheduleView: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,

View File

@ -0,0 +1,327 @@
//
// LocationPickerVC.swift
// QuickLocation
//
// Created by on 2026/6/24.
//
import UIKit
import RxSwift
import RxCocoa
import CoreLocation
import SwiftyUserDefaults
#if !targetEnvironment(simulator)
import AMapNaviKit
import AMapSearchKit
#endif
struct PickedLocation {
let name: String
let address: String
let coordinate: CLLocationCoordinate2D
var province: String = ""
var city: String = ""
var district: String = ""
var street: String = ""
var country: String = ""
var formatted_address: String = ""
}
class LocationPickerVC: BaseViewController {
override var isNavigationBarHidden: Bool { true }
var onPickedLocation: ((PickedLocation) -> Void)?
var initialLocation: PickedLocation?
fileprivate var rootView: LocationPickerView!
override func loadView() {
rootView = LocationPickerView(frame: UIScreen.main.bounds)
view = rootView
}
private var isShowPoi: Bool = false
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// pop/dismiss
if isMovingFromParent || isBeingDismissed {
#if !targetEnvironment(simulator)
rootView.cleanupMap()
#endif
}
}
override func viewDidLoad() {
super.viewDidLoad()
setupMap()
setupKeyboard()
setupSearch()
//
if let loc = initialLocation {
selectedLocation = loc
rootView.bottomView.isHidden = false
rootView.poiNameLab.text = loc.name
rootView.poiAddressLab.text = loc.address
if CLLocationCoordinate2DIsValid(loc.coordinate) {
rootView.mapView.setCenter(loc.coordinate, animated: false)
rootView.mapView.setZoomLevel(19, animated: false)
addLocationAnnotation(coordinate: loc.coordinate)
}
}
}
// MARK: - Keyboard
private var keyboardHeight: CGFloat = 0
private func setupKeyboard() {
NotificationCenter.default.rx.notification(UIResponder.keyboardWillShowNotification)
.subscribe(onNext: { [weak self] noti in
guard let self = self,
let frame = noti.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect
else { return }
self.keyboardHeight = frame.height
})
.disposed(by: disposeBag)
}
// MARK: - Search
#if !targetEnvironment(simulator)
private let searchAPI = AMapSearchAPI()
private var searchPoiRequest = AMapPOIKeywordsSearchRequest()
#endif
private var selectedLocation: PickedLocation?
private var searchKeyword: String = ""
private var poiItems: [AMapPOI] = []
private var maxTableHeight: CGFloat = 300
private var currentLocation: CLLocationCoordinate2D?
private func setupSearch() {
#if !targetEnvironment(simulator)
searchAPI?.delegate = self
searchPoiRequest.city = ""
searchPoiRequest.offset = 10
if let loc = currentLocation {
searchPoiRequest.location = AMapGeoPoint.location(withLatitude: CGFloat(loc.latitude), longitude: CGFloat(loc.longitude))
}
#endif
rootView.resultTableView.delegate = self
rootView.resultTableView.dataSource = self
//
rootView.searchField.rx.text.orEmpty
.debounce(.milliseconds(400), scheduler: MainScheduler.instance)
// .filter { $0.count >= 2 }
.subscribe(onNext: { [weak self] keyword in
self?.poiSearch(keyword: keyword)
})
.disposed(by: disposeBag)
rootView.searchField.rx.controlEvent(.editingDidBegin)
.subscribe(onNext: {
self.isShowPoi = false
})
.disposed(by: disposeBag)
rootView.searchField.rx.controlEvent(.editingDidEndOnExit)
.subscribe(onNext: { [weak self] _ in
guard let self = self, !self.poiItems.isEmpty else { return }
self.selectPOI(at: 0)
self.rootView.searchField.resignFirstResponder()
self.rootView.resultTableView.isHidden = true
})
.disposed(by: disposeBag)
//
rootView.searchBtn.rx.tap
.subscribe(onNext: { [weak self] _ in
guard let self = self, !self.poiItems.isEmpty else { return }
self.selectPOI(at: 0)
self.rootView.searchField.resignFirstResponder()
self.rootView.resultTableView.isHidden = true
})
.disposed(by: disposeBag)
rootView.backBtn.rx.tap
.subscribe(onNext: { [weak self] _ in
self?.dismiss(animated: true)
})
.disposed(by: disposeBag)
rootView.confirmBtn.rx.tap
.subscribe(onNext: { [weak self] _ in
guard let self = self, let loc = self.selectedLocation else { return }
self.onPickedLocation?(loc)
self.dismiss(animated: true)
})
.disposed(by: disposeBag)
}
private func poiSearch(keyword: String) {
searchKeyword = keyword
#if !targetEnvironment(simulator)
searchPoiRequest.keywords = keyword
searchAPI?.aMapPOIKeywordsSearch(searchPoiRequest)
#endif
}
private func selectPOI(at index: Int) {
guard index < poiItems.count else { return }
selectLocation(poi: poiItems[index])
}
private func selectLocation(poi: AMapPOI) {
let coord = CLLocationCoordinate2D(latitude: CGFloat(poi.location.latitude), longitude: CGFloat(poi.location.longitude))
guard CLLocationCoordinate2DIsValid(coord) else { return }
isShowPoi = true
selectedLocation = PickedLocation(
name: poi.name ?? "",
address: poi.address ?? "",
coordinate: coord,
province: poi.province ?? "",
city: poi.city ?? "",
district: poi.district ?? "",
formatted_address: poi.address ?? ""
)
rootView.resultTableView.isHidden = true
rootView.bottomView.isHidden = false
rootView.poiNameLab.text = poi.name
rootView.poiAddressLab.text = poi.address
rootView.mapView.setCenter(coord, animated: true)
rootView.mapView.setZoomLevel(19, animated: true)
addLocationAnnotation(coordinate: coord)
}
private func updateTableHeight(itemCount: Int) {
let contentH = CGFloat(itemCount) * 50
let searchBarBottom = kStatusBarHeight + 8 + 44 + 10
let bottomOffset: CGFloat = keyboardHeight > 0 ? keyboardHeight : 200
let available = kScreenHeight - searchBarBottom - bottomOffset - 10
maxTableHeight = max(80, available)
let h = min(contentH, maxTableHeight)
rootView.resultTableView.layoutChain.height(h)
}
// MARK: - Map
private func setupMap() {
#if !targetEnvironment(simulator)
rootView.mapView.delegate = self
rootView.mapView.showsUserLocation = false
if let lat = Defaults[\.currentLatitude], let lon = Defaults[\.currentLongitude] {
let coord = CLLocationCoordinate2D(latitude: lat, longitude: lon)
if CLLocationCoordinate2DIsValid(coord) {
currentLocation = coord
rootView.mapView.setCenter(coord, animated: false)
rootView.mapView.setZoomLevel(18, animated: false)
}
}
#endif
}
private func addLocationAnnotation(coordinate: CLLocationCoordinate2D) {
#if !targetEnvironment(simulator)
for ann in rootView.mapView.annotations?.compactMap({ $0 as? MAPointAnnotation }) ?? [] {
rootView.mapView.removeAnnotation(ann)
}
let ann = MAPointAnnotation()
ann.coordinate = coordinate
rootView.mapView.addAnnotation(ann)
#endif
}
}
#if !targetEnvironment(simulator)
// MARK: - AMapSearchDelegate
extension LocationPickerVC: AMapSearchDelegate {
func onPOISearchDone(_ request: AMapPOISearchBaseRequest!, response: AMapPOISearchResponse!) {
// POI ID
if request is AMapPOIIDSearchRequest, let poi = response.pois?.first {
selectLocation(poi: poi)
return
}
//
guard response.pois.count > 0, isShowPoi == false else { return }
poiItems = response.pois
rootView.resultTableView.isHidden = false
rootView.resultTableView.reloadData()
updateTableHeight(itemCount: poiItems.count)
}
func onReGeocodeSearchDone(_ request: AMapReGeocodeSearchRequest!, response: AMapReGeocodeSearchResponse!) {
guard let regeo = response.regeocode else { return }
let address = regeo.formattedAddress ?? ""
selectedLocation = PickedLocation(
name: rootView.poiNameLab.text ?? "",
address: address,
coordinate: selectedLocation?.coordinate ?? kCLLocationCoordinate2DInvalid
)
rootView.poiAddressLab.text = address
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
print("AMapSearch error: \(error.localizedDescription)")
}
}
// MARK: - MAMapViewDelegate
extension LocationPickerVC: MAMapViewDelegate {
func mapView(_ mapView: MAMapView!, didTouchPois pois: [Any]!) {
guard let touchPoi = pois?.first as? MATouchPoi, let uid = touchPoi.uid, !uid.isEmpty else { return }
let request = AMapPOIIDSearchRequest()
request.uid = uid
searchAPI?.aMapPOIIDSearch(request)
}
func mapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! {
if annotation is MAUserLocation { return nil }
guard annotation is MAPointAnnotation else { return nil }
let identifier = "LocationPin"
var view = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
if view == nil {
view = MAAnnotationView(annotation: annotation, reuseIdentifier: identifier)
} else {
view?.annotation = annotation
}
view?.image = UIImage(named: "Schedule/location")
view?.centerOffset = CGPoint(x: 0, y: -30)
return view
}
}
// MARK: - UITableViewDataSource / Delegate
extension LocationPickerVC: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
poiItems.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") ?? UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
let poi = poiItems[indexPath.row]
let name = poi.name ?? ""
if !searchKeyword.isEmpty, let range = name.lowercased().range(of: searchKeyword.lowercased()) {
let attr = NSMutableAttributedString(string: name)
attr.addAttribute(.foregroundColor, value: UIColor(hexStr: "#16B3FF"), range: NSRange(range, in: name))
cell.textLabel?.attributedText = attr
} else {
cell.textLabel?.text = name
}
cell.textLabel?.font = .systemFont(ofSize: 14)
cell.detailTextLabel?.text = poi.address
cell.detailTextLabel?.font = .systemFont(ofSize: 12)
cell.detailTextLabel?.textColor = .gray
let arrow = UIImageView(image: UIImage(named: "Schedule/arrow"))
arrow.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
cell.accessoryView = arrow
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
rootView.searchField.resignFirstResponder()
selectPOI(at: indexPath.row)
rootView.searchField.text = poiItems[indexPath.row].name
}
}
#endif

View File

@ -0,0 +1,191 @@
//
// LocationPickerView.swift
// QuickLocation
//
// Created by on 2026/6/24.
//
import UIKit
import RxSwift
import RxCocoa
#if !targetEnvironment(simulator)
import AMapNaviKit
#endif
class LocationPickerView: UIView {
var disposeBag = DisposeBag()
private func setupUI() {
#if !targetEnvironment(simulator)
addSubview(mapView)
#endif
addSubview(topBgView)
topBgView.addSubview(backBtn)
topBgView.addSubview(searchField)
topBgView.addSubview(searchBtn)
addSubview(resultTableView)
addSubview(bottomView)
bottomView.addSubview(poiNameLab)
bottomView.addSubview(poiAddressLab)
bottomView.addSubview(confirmBtn)
mapView.layoutChain
.edges()
topBgView.layoutChain
.top(kStatusBarHeight + 8)
.edgesHorzontal(15)
.height(44)
backBtn.layoutChain
.left().centerY()
.width(36).height(36)
searchField.layoutChain
.leftToRightOfView(backBtn, offset: 8)
.centerY()
.right(60)
.height(36)
searchBtn.layoutChain
.right(2).centerY()
.width(80).height(36)
resultTableView.layoutChain
.topToBottomOfView(topBgView, offset: 10)
.edgesHorzontal(15)
bottomView.layoutChain
.edgesHorzontal()
.bottom()
.height(160)
poiNameLab.layoutChain
.top(16).left(16).right(16)
poiAddressLab.layoutChain
.topToBottomOfView(poiNameLab, offset: 8)
.left(16).right(16)
confirmBtn.layoutChain
.edgesHorzontal(30)
.height(44)
.bottom(kSafeBottomMargin + 16)
}
// MARK: - Views
#if !targetEnvironment(simulator)
lazy var mapView: MAMapView! = {
let mv = MAMapView()
mv.zoomLevel = 18
mv.showsUserLocation = false
mv.showsCompass = false
return mv
}()
#endif
lazy var topBgView: UIView = {
let v = UIView()
v.backgroundColor = .white
v.cornerRadius = 22
v.layer.shadowColor = UIColor.black.withAlphaComponent(0.1).cgColor
v.layer.shadowOffset = .zero
v.layer.shadowRadius = 6
v.layer.shadowOpacity = 1
return v
}()
lazy var backBtn: UIButton = {
let btn = UIButton(type: .custom)
btn.setImage(UIImage(named: "Common/back"), for: .normal)
btn.extendEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
return btn
}()
lazy var searchField: UITextField = {
let tf = UITextField()
tf.placeholder = "搜索地点、公园、商圈、道路"
tf.font = .systemFont(ofSize: 14)
tf.clearButtonMode = .whileEditing
tf.returnKeyType = .search
return tf
}()
lazy var searchBtn: UIButton = {
let btn = UIButton(type: .custom)
btn.setTitle("搜索", for: .normal)
btn.setTitleColor(.white, for: .normal)
btn.titleLabel?.font = .systemFont(ofSize: 14, weight: .medium)
btn.setBackgroundImage(UIImage(named: "Common/button_bg_2"), for: .normal)
btn.cornerRadius = 18
return btn
}()
lazy var resultTableView: UITableView = {
let tv = UITableView(frame: .zero, style: .plain)
tv.backgroundColor = .white
tv.isHidden = true
tv.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
tv.estimatedRowHeight = 60
tv.cornerRadius = 10
return tv
}()
lazy var bottomView: UIView = {
let v = UIView()
v.backgroundColor = .white
v.isHidden = true
v.layer.cornerRadius = 16
v.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
v.layer.shadowColor = UIColor.black.withAlphaComponent(0.1).cgColor
v.layer.shadowOffset = CGSize(width: 0, height: -2)
v.layer.shadowRadius = 10
v.layer.shadowOpacity = 1
return v
}()
lazy var poiNameLab: UILabel = {
let l = UILabel()
l.font = .systemFont(ofSize: 16, weight: .semibold)
l.textColor = UIColor(hexStr: "#333333")
return l
}()
lazy var poiAddressLab: UILabel = {
let l = UILabel()
l.font = .systemFont(ofSize: 13)
l.textColor = UIColor(hexStr: "#999999")
l.numberOfLines = 2
return l
}()
lazy var confirmBtn: UIButton = {
let btn = UIButton(type: .custom)
btn.setTitle("确定位置", for: .normal)
btn.setTitleColor(.white, for: .normal)
btn.titleLabel?.font = .systemFont(ofSize: 16, weight: .medium)
btn.setBackgroundImage(UIImage(named: "Common/button_bg_2"), for: .normal)
btn.cornerRadius = 22
return btn
}()
#if !targetEnvironment(simulator)
func cleanupMap() {
mapView?.delegate = nil
mapView?.removeFromSuperview()
mapView = nil
}
#endif
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .white
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}