├── DingtalkUI.xcworkspace
├── xcuserdata
│ └── HYY.xcuserdatad
│ │ └── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
└── contents.xcworkspacedata
├── DingtalkUI.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
├── Podfile
├── DingtalkUI
├── MapSearchViewController.h
├── DingtalkPod.h
├── CoordinateForm.h
├── DingtalkPod.m
├── DingtalkPluginConfig.h
├── POIAnnotation.h
├── DingtalkUI.h
├── Info.plist
├── DingtalkPluginConfig.m
├── CoordinateForm.m
├── POIAnnotation.m
├── 1.0.0
│ └── DingtalkUI.podspec
├── 1.0.1
│ └── DingtalkUI.podspec
├── DingtalkUI.m
└── MapSearchViewController.m
├── Podfile.lock
├── README.md
└── DingtalkUI.podspec
/DingtalkUI.xcworkspace/xcuserdata/HYY.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/DingtalkUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/DingtalkUI.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | source 'https://github.com/AloneMonkey/MonkeyDevSpecs.git'
2 |
3 | use_frameworks!
4 |
5 | target 'DingtalkUI' do
6 | # pod 'DingtalkPod'
7 | pod 'MDSettingCenter'
8 | pod 'CaptainHook'
9 |
10 | #高德地图
11 | pod 'AMap3DMap'
12 | pod 'AMapSearch'
13 |
14 | end
15 |
--------------------------------------------------------------------------------
/DingtalkUI/MapSearchViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // MapSearchViewController.h
3 | // CaptainHook
4 | //
5 | // Created by HYY on 2017/11/24.
6 | //
7 |
8 | #import
9 | #import
10 | @interface MapSearchViewController : UIViewController
11 |
12 | @property(copy, nonatomic)void (^searchCoordinateBlock)(CLLocationCoordinate2D coordinate);
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/DingtalkUI/DingtalkPod.h:
--------------------------------------------------------------------------------
1 | //
2 | // DingtalkPod.h
3 | // DingtalkPod
4 | //
5 | // Created by jack ma on 2017/9/14.
6 | // Copyright © 2017年 jack ma. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface DingtalkPod :NSObject
13 | /**
14 | 设置经纬度
15 |
16 | @param location 经纬度
17 | */
18 | -(void)setLocation:(CLLocationCoordinate2D) location;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/DingtalkUI/CoordinateForm.h:
--------------------------------------------------------------------------------
1 | //
2 | // CoordinateForm.h
3 | // DingtalkUI
4 | //
5 | // Created by HYY on 2017/11/21.
6 | // Copyright © 2017年 com.laiwang.DingTalk. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 | @interface CoordinateForm : NSObject
12 |
13 | @property(copy, nonatomic)NSString *latitude;
14 | @property(copy, nonatomic)NSString *longitude;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/DingtalkUI/DingtalkPod.m:
--------------------------------------------------------------------------------
1 |
2 | //
3 | // DingtalkPod.m
4 | // DingtalkPod
5 | //
6 | // Created by jack ma on 2017/9/14.
7 | // Copyright (c) 2017年 jack ma. All rights reserved.
8 | //
9 |
10 | #import "DingtalkPod.h"
11 | #import "DingtalkPluginConfig.h"
12 | #import
13 | #import
14 |
15 | @implementation DingtalkPod
16 | -(void)setLocation:(CLLocationCoordinate2D)location{
17 | [pluginConfig setLocation:location];
18 | }
19 | @end
20 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - CaptainHook (2.0.0)
3 | - DingtalkPod (1.0.2):
4 | - CaptainHook
5 | - MDSettingCenter (1.1.0)
6 |
7 | DEPENDENCIES:
8 | - DingtalkPod
9 | - MDSettingCenter
10 |
11 | SPEC CHECKSUMS:
12 | CaptainHook: 3889d18beaf6a87b19c9bb47f5c8348a0b275036
13 | DingtalkPod: 8a629715e388c8868556a4739763f0832c149707
14 | MDSettingCenter: 41b910206cd1d826e11247413cd48a068d38e274
15 |
16 | PODFILE CHECKSUM: 093b8a8333ed3492f23725bc7ff9521cb50acf00
17 |
18 | COCOAPODS: 1.3.1
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DingTalkUI
2 | 修改钉钉GPS打卡位置
3 |
4 | ## 1.给Dafa开发的DingtalkPod添加了视图界面
5 | http://www.cnblogs.com/DafaRan/p/7522284.html author: Dafa blog: http://www.cnblogs.com/DafaRan/
6 |
7 | ## 2. 主要功能:
8 | ### a. 手动输入经纬度
9 |
10 |
11 | ### b. 直接搜索地理位置
12 |
13 |
14 | ### c. 地图直接选取坐标点
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/DingtalkUI/DingtalkPluginConfig.h:
--------------------------------------------------------------------------------
1 | //
2 | // DingtalkPluginConfig.h
3 | // DingtalkPod
4 | //
5 | // Created by jack ma on 2017/9/14.
6 | // Copyright © 2017年 jack ma. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @class DingtalkPluginConfig;
13 | extern DingtalkPluginConfig* pluginConfig;
14 |
15 | @interface DingtalkPluginConfig : NSObject
16 |
17 | +(DingtalkPluginConfig*)sharedInstance;
18 | /**
19 | 经纬度
20 | */
21 | @property(nonatomic, assign) CLLocationCoordinate2D location;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/DingtalkUI/POIAnnotation.h:
--------------------------------------------------------------------------------
1 | //
2 | // AMapSearchApiModel.h
3 | // CaptainHook
4 | //
5 | // Created by HYY on 2017/11/24.
6 | //
7 |
8 | #import
9 | #import
10 | #import
11 |
12 | @interface POIAnnotation : NSObject
13 |
14 |
15 | - (id)initWithPOI:(AMapPOI *)poi;
16 |
17 | @property(nonatomic, strong)AMapPOI *poi;
18 | @property(assign, nonatomic)CLLocationCoordinate2D coordinate;
19 |
20 | @property(nonatomic, strong)NSString *title;
21 | @property(nonatomic, strong)NSString *subtitle;
22 | //
23 | //- (NSString *)title;
24 | //
25 | //- (NSString *)subtitle;
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/DingtalkUI/DingtalkUI.h:
--------------------------------------------------------------------------------
1 | //
2 | // DingtalkUI.h
3 | // DingtalkUI
4 | //
5 | // Created by HYY on 2017/11/21.
6 | // Copyright © 2017年 com.laiwang.DingTalk. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 |
12 | @interface DingtalkUI: NSObject
13 | + (instancetype)sharedInstance;
14 |
15 | /**
16 | * @brief 添加悬浮球
17 | * @param
18 | */
19 | - (void)addToWindow:(UIWindow *)window;
20 |
21 | @end
22 |
23 |
24 | ////! Project version number for DingtalkUI.
25 | //FOUNDATION_EXPORT double DingtalkUIVersionNumber;
26 | //
27 | ////! Project version string for DingtalkUI.
28 | //FOUNDATION_EXPORT const unsigned char DingtalkUIVersionString[];
29 |
30 | // In this header, you should import all the public headers of your framework using statements like #import
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/DingtalkUI/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/DingtalkUI/DingtalkPluginConfig.m:
--------------------------------------------------------------------------------
1 | //
2 | // DingtalkPluginConfig.m
3 | // DingtalkPod
4 | //
5 | // Created by jack ma on 2017/9/14.
6 | // Copyright © 2017年 jack ma. All rights reserved.
7 | //
8 | #import "CaptainHook.h"
9 | #import "DingtalkPluginConfig.h"
10 |
11 | DingtalkPluginConfig* pluginConfig = nil;
12 |
13 | @implementation DingtalkPluginConfig
14 | +(DingtalkPluginConfig *)sharedInstance{
15 | static id sharedInstance;
16 | static dispatch_once_t onceToken;
17 | dispatch_once(&onceToken, ^{
18 | sharedInstance = [self new];
19 | });
20 | return sharedInstance;
21 | }
22 |
23 | - (instancetype)init
24 | {
25 | self = [super init];
26 | if (self) {
27 |
28 | _location = CLLocationCoordinate2DMake(0, 0);
29 |
30 | }
31 | return self;
32 | }
33 |
34 | @end
35 |
36 | CHConstructor{
37 | pluginConfig = [DingtalkPluginConfig sharedInstance];
38 | }
39 |
40 |
41 |
--------------------------------------------------------------------------------
/DingtalkUI/CoordinateForm.m:
--------------------------------------------------------------------------------
1 | //
2 | // CoordinateForm.m
3 | // DingtalkUI
4 | //
5 | // Created by HYY on 2017/11/21.
6 | // Copyright © 2017年 com.laiwang.DingTalk. All rights reserved.
7 | //
8 |
9 | #import "CoordinateForm.h"
10 |
11 | @implementation CoordinateForm
12 |
13 |
14 | - (NSDictionary *)latitudeField{
15 | return @{FXFormFieldTitle:@"纬度",
16 | FXFormFieldHeader:@"修改位置",
17 | };
18 | }
19 |
20 | - (NSDictionary *)longitudeField{
21 | return @{FXFormFieldTitle:@"经度",
22 | };
23 | }
24 |
25 | - (NSArray *)extraFields{
26 | return @[
27 | // @{FXFormFieldTitle:@"提交",
28 | // FXFormFieldHeader:@"",
29 | // FXFormFieldAction:@"modifyCoordinate"
30 | // },
31 | @{FXFormFieldTitle:@"本地搜索",
32 | FXFormFieldHeader:@"",
33 | FXFormFieldAction:@"searchCoordinate"
34 | },
35 |
36 | // @{FXFormFieldTitle:@"高德地图搜索",
37 | // FXFormFieldHeader:@"",
38 | // FXFormFieldAction:@"aMapsearchCoordinate"
39 | // }
40 | //
41 | ];
42 | }
43 |
44 |
45 | @end
46 |
47 |
--------------------------------------------------------------------------------
/DingtalkUI/POIAnnotation.m:
--------------------------------------------------------------------------------
1 | //
2 | // AMapSearchApiModel.m
3 | // CaptainHook
4 | //
5 | // Created by HYY on 2017/11/24.
6 | //
7 |
8 | #import "POIAnnotation.h"
9 | @interface POIAnnotation ()
10 | //@property(nonatomic, strong,readwrite)AMapPOI *poi;
11 | @end
12 |
13 | @implementation POIAnnotation
14 |
15 | //- (NSString *)title{
16 | // return self.poi.name;
17 | //}
18 | //
19 | //- (NSString *)subtitle{
20 | // return self.poi.address;
21 | //}
22 |
23 | //- (void)setTitle:(NSString *)title{
24 | // if (_title != title) {
25 | // _title = title;
26 | // }
27 | //}
28 | //
29 | //- (void)setSubtitle:(NSString *)subtitle{
30 | // if (_subtitle != subtitle) {
31 | // _subtitle = subtitle;
32 | // }
33 | //}
34 |
35 | //- (CLLocationCoordinate2D)coordinate{
36 | // return CLLocationCoordinate2DMake(self.poi.location.latitude, self.poi.location.longitude);
37 | //}
38 |
39 | #pragma mark - life cycle
40 | - (id)initWithPOI:(AMapPOI *)poi{
41 | if (self = [super init]) {
42 | self.poi = poi;
43 | self.title = poi.name;
44 | self.subtitle = poi.address;
45 | self.coordinate = CLLocationCoordinate2DMake(self.poi.location.latitude, self.poi.location.longitude);
46 | }
47 | return self;
48 | }
49 |
50 | @end
51 |
--------------------------------------------------------------------------------
/DingtalkUI/1.0.0/DingtalkUI.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |spec|
2 | spec.name = "DingtalkUI" #Pod的名字
3 | spec.version = "1.0.1" #版本号
4 | spec.summary = "DingtalkUI for DingtalkPod [MonkeyDev]"
5 | spec.description = "DingtalkPod 修改钉钉GPS打卡位置,需要MonkeyDev"
6 |
7 | spec.homepage = "https://github.com/NearEven/DingTalkUI" #Pod的地址
8 |
9 | # spec.license = { :type => "MIT", :file => "LICENSE" } #License
10 | spec.author = { "NearEven" => "nearby.xu@gmail.com}" } #作者
11 | spec.social_media_url = "http://evenxu.cc" #weibo
12 | spec.platform = :ios, "8.0" #平台、版本
13 | spec.source = :git => "https://github.com/NearEven/DingTalkUI.git" #代码的git地址以及tag
14 | spec.source_files = "DingtalkUI/*.{h,m}" #本地验证,表示当前目录以及子目录的所有h或m结尾的文件 如果发布到MonkeyPodSpecs需要填写git clone下来的对应的路径
15 | spec.public_header_files = "DingtalkUI/DingtalkUI.h" #需要对外导出的头文件 此处为本地验证
16 | spec.requires_arc = true #ARC
17 | spec.pod_target_xcconfig = { "ONLY_ACTIVE_ARCH" => "NO", 'HEADER_SEARCH_PATHS' => '/opt/MonkeyDev/include' } #这个必须有,不要修改
18 | spec.dependency 'DingtalkPod'
19 | spec.dependency 'MDSettingCenter'
20 | spec.dependency 'AMap3DMap'
21 | spec.dependency 'AMapSearch'
22 | end
23 |
24 |
--------------------------------------------------------------------------------
/DingtalkUI/1.0.1/DingtalkUI.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |spec|
2 | spec.name = "DingtalkUI" #Pod的名字
3 | spec.version = "1.0.1" #版本号
4 | spec.summary = "DingtalkUI for DingtalkPod [MonkeyDev]"
5 | spec.description = "DingtalkPod 修改钉钉GPS打卡位置,需要MonkeyDev"
6 |
7 | spec.homepage = "https://github.com/NearEven/DingTalkUI" #Pod的地址
8 |
9 | # spec.license = { :type => "MIT", :file => "LICENSE" } #License
10 | spec.author = { "NearEven" => "nearby.xu@gmail.com" } #作者
11 | spec.social_media_url = "http://evenxu.cc" #weibo
12 | spec.platform = :ios, "8.0" #平台、版本
13 | spec.source = { :git => "https://github.com/NearEven/DingTalkUI.git" } #代码的git地址以及tag
14 | spec.source_files = "DingtalkUI/*.{h,m}" #本地验证,表示当前目录以及子目录的所有h或m结尾的文件 如果发布到MonkeyPodSpecs需要填写git clone下来的对应的路径
15 | spec.public_header_files = "DingtalkUI/DingtalkUI.h" #需要对外导出的头文件 此处为本地验证
16 | spec.requires_arc = true #ARC
17 | spec.pod_target_xcconfig = { "ONLY_ACTIVE_ARCH" => "NO", 'HEADER_SEARCH_PATHS' => '/opt/MonkeyDev/include' } #这个必须有,不要修改
18 |
19 | spec.dependency 'DingtalkPod'
20 | spec.dependency 'MDSettingCenter'
21 | # spec.dependency 'AMap3DMap'
22 | # spec.dependency 'AMapSearch'
23 | end
24 |
25 |
--------------------------------------------------------------------------------
/DingtalkUI.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |spec|
2 | spec.name = "DingtalkUI" #Pod的名字
3 | spec.version = "1.0.2" #版本号
4 | spec.summary = "DingtalkUI for DingtalkPod [MonkeyDev]"
5 | spec.description = "DingtalkPod 修改钉钉GPS打卡位置,需要MonkeyDev"
6 |
7 | spec.homepage = "https://github.com/NearEven/DingTalkUI" #Pod的地址
8 |
9 | # spec.license = { :type => "MIT", :file => "LICENSE" } #License
10 | spec.author = { "NearEven" => "nearby.xu@gmail.com}" } #作者
11 | spec.social_media_url = "http://evenxu.cc" #weibo
12 | spec.platform = :ios, "8.0" #平台、版本
13 | spec.source = {:git => "https://github.com/NearEven/DingTalkUI.git"} #代码的git地址以及tag
14 |
15 | spec.source_files = "DingtalkUI/*.{h,m}"
16 |
17 | #本地验证,表示当前目录以及子目录的所有h或m结尾的文件 如果发布到MonkeyPodSpecs需要填写git clone下来的对应的路径ßsßß
18 | spec.public_header_files = "DingtalkUI/DingtalkUI.h" #需要对外导出的头文件 此处为本地验证
19 | spec.requires_arc = true #ARC
20 | spec.pod_target_xcconfig = { "ONLY_ACTIVE_ARCH" => "NO", 'HEADER_SEARCH_PATHS' => '/opt/MonkeyDev/include' } #这个必须有,不要修改
21 |
22 |
23 | spec.dependency 'MDSettingCenter'
24 | spec.dependency 'CaptainHook'
25 | spec.dependency 'AMap3DMap'
26 | spec.dependency 'AMapSearch'
27 | end
28 |
29 |
--------------------------------------------------------------------------------
/DingtalkUI/DingtalkUI.m:
--------------------------------------------------------------------------------
1 | // weibo: http://weibo.com/xiaoqing28
2 | // blog: http://www.alonemonkey.com
3 | //
4 | // DingtalkUI.m
5 | // DingtalkUI
6 | //
7 | // Created by HYY on 2017/11/21.
8 | // Copyright (c) 2017年 com.laiwang.DingTalk. All rights reserved.
9 | //
10 |
11 | #import "DingtalkUI.h"
12 | #import
13 | #import "CaptainHook.h"
14 | #import
15 | #import
16 | #import "DingtalkUI.h"
17 | #import "CoordinateForm.h"
18 | #import "MapSearchViewController.h"
19 | #import
20 | #import "POIAnnotation.h"
21 | #import "DingtalkPluginConfig.h"
22 | #import "DingtalkPod.h"
23 |
24 | @implementation DingtalkUI
25 |
26 | + (instancetype)sharedInstance{
27 | static DingtalkUI *instance = nil;
28 | static dispatch_once_t onceToken;
29 | dispatch_once(&onceToken, ^{
30 | instance = [[DingtalkUI alloc] init];
31 | });
32 | return instance;
33 | }
34 |
35 | // 添加悬浮球
36 | - (void)addToWindow:(UIWindow *)window{
37 | MDSuspendBall *ballInstance = [MDSuspendBall sharedInstance];
38 | [ballInstance addToWindow:window];
39 | }
40 | @end
41 |
42 | CHDeclareClass(MDSettingsViewController)
43 |
44 | // 设置fxform
45 | CHOptimizedMethod0(self, void,MDSettingsViewController, setupSubViews){
46 | CHSuper0(MDSettingsViewController, setupSubViews);
47 | FXFormController *controller = [self valueForKeyPath:@"formController"];
48 | CoordinateForm *cForm = [[CoordinateForm alloc] init];
49 | controller.form = cForm;
50 | }
51 |
52 | // 设置coordinate
53 | CHDeclareMethod0(void, MDSettingsViewController, modifyCoordinate){
54 | FXFormController *controller = [self valueForKeyPath:@"formController"];
55 | CoordinateForm *form = controller.form;
56 | CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake([form.latitude doubleValue], [form.longitude doubleValue]);
57 | [[DingtalkPod alloc] setLocation:coordinate];
58 | }
59 |
60 | // 搜索coordinate
61 | CHDeclareMethod0(void, MDSettingsViewController, searchCoordinate){
62 | MapSearchViewController *mapController = [[MapSearchViewController alloc] init];
63 | [mapController setSearchCoordinateBlock:^(CLLocationCoordinate2D coordinate) {
64 | [[DingtalkPod alloc] setLocation:coordinate];
65 | FXFormController *controller = [self valueForKeyPath:@"formController"];
66 | CoordinateForm *form = controller.form;
67 | form.latitude = [@(coordinate.latitude) stringValue];
68 | form.longitude = [@(coordinate.longitude) stringValue];
69 | }];
70 |
71 | [self.navigationController pushViewController:mapController animated:YES];
72 | }
73 |
74 | CHDeclareMethod0(void, MDSettingsViewController, aMapsearchCoordinate){
75 | NSURL *scheme = [NSURL URLWithString:@"iosamap://"];
76 | BOOL canOpen = [[UIApplication sharedApplication] canOpenURL:scheme];
77 |
78 | NSURL *myLocationScheme = [NSURL URLWithString:@"iosamap://myLocation?sourceApplication=DingTalk"];
79 | if (canOpen) {
80 | if ([[UIDevice currentDevice].systemVersion integerValue] >= 10) { //iOS10以后,使用新API
81 | [[UIApplication sharedApplication] openURL:myLocationScheme options:@{} completionHandler:^(BOOL success) {
82 | NSLog(@"scheme调用结束"); }];
83 |
84 | } else { //iOS10以前,使用旧API
85 | [[UIApplication sharedApplication] openURL:myLocationScheme];
86 |
87 | }
88 | }
89 |
90 |
91 |
92 |
93 | }
94 |
95 | CHOptimizedMethod0(self, void, MDSettingsViewController, exit){
96 |
97 | FXFormController *controller = [self valueForKeyPath:@"formController"];
98 | CoordinateForm *form = controller.form;
99 | CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake([form.latitude doubleValue], [form.longitude doubleValue]);
100 | [[DingtalkPod alloc] setLocation:coordinate];
101 | UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"修改成功" message:@"sdafasdf" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
102 | [[UIApplication sharedApplication].keyWindow addSubview:alert];
103 |
104 | CHSuper0(MDSettingsViewController, exit);
105 | }
106 |
107 |
108 | CHConstructor{
109 | CHLoadLateClass(MDSettingsViewController);
110 | CHHook0(MDSettingsViewController, setupSubViews);
111 | CHHook0(MDSettingsViewController, exit);
112 | }
113 |
114 |
115 |
116 |
117 | #pragma mark -- uri调用高德地图进行搜索
118 |
119 |
120 |
121 |
122 |
123 |
124 | #pragma mark - DingtalkPod
125 | // http://www.cnblogs.com/DafaRan/p/7522284.html author: Dafa blog: http://www.cnblogs.com/DafaRan/
126 |
127 | CHDeclareClass(CLLocation);
128 |
129 | CHOptimizedMethod0(self, CLLocationCoordinate2D, CLLocation, coordinate){
130 | CLLocationCoordinate2D coordinate = CHSuper(0, CLLocation, coordinate);
131 | if(pluginConfig.location.longitude || pluginConfig.location.latitude ){
132 | coordinate = pluginConfig.location;
133 | }
134 | return coordinate;
135 | }
136 |
137 | CHConstructor{
138 | CHLoadLateClass(CLLocation);
139 | CHClassHook(0, CLLocation, coordinate);
140 | }
141 |
142 |
143 | CHDeclareClass(AMapGeoFenceManager);
144 | CHMethod(0, BOOL,AMapGeoFenceManager,detectRiskOfFakeLocation){
145 |
146 | return NO;
147 | }
148 | CHMethod(0, BOOL,AMapGeoFenceManager,pausesLocationUpdatesAutomatically){
149 |
150 | return NO;
151 | }
152 | CHConstructor{
153 | CHLoadLateClass(AMapGeoFenceManager);
154 | CHClassHook(0, AMapGeoFenceManager,detectRiskOfFakeLocation);
155 | CHClassHook(0, AMapGeoFenceManager,pausesLocationUpdatesAutomatically);
156 | }
157 |
158 |
159 |
160 |
161 | CHDeclareClass(AMapLocationManager);
162 | CHMethod(0, BOOL,AMapLocationManager,detectRiskOfFakeLocation){
163 |
164 | return NO;
165 | }
166 | CHMethod(0, BOOL,AMapLocationManager,pausesLocationUpdatesAutomatically){
167 |
168 | return NO;
169 | }
170 | CHConstructor{
171 | CHLoadLateClass(AMapLocationManager);
172 | CHClassHook(0, AMapLocationManager,detectRiskOfFakeLocation);
173 | CHClassHook(0, AMapLocationManager,pausesLocationUpdatesAutomatically);
174 | }
175 |
176 |
177 |
178 |
179 |
180 | CHDeclareClass(DTALocationManager);
181 | CHMethod(0, BOOL,DTALocationManager,detectRiskOfFakeLocation){
182 |
183 | return NO;
184 | }
185 | CHMethod(0, BOOL,DTALocationManager,dt_pausesLocationUpdatesAutomatically){
186 |
187 | return NO;
188 | }
189 | CHConstructor{
190 | CHLoadLateClass(DTALocationManager);
191 | CHClassHook(0, DTALocationManager,detectRiskOfFakeLocation);
192 | CHClassHook(0, DTALocationManager,dt_pausesLocationUpdatesAutomatically);
193 | }
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
--------------------------------------------------------------------------------
/DingtalkUI/MapSearchViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // MapSearchViewController.m
3 | // CaptainHook
4 | //
5 | // Created by HYY on 2017/11/24.
6 | //
7 |
8 | #import "MapSearchViewController.h"
9 | #import "CaptainHook.h"
10 | #import
11 | //#import
12 | #import
13 | #import
14 | #import "POIAnnotation.h"
15 | #import
16 |
17 | @interface MapSearchCell: UITableViewCell
18 | @property(nonatomic, strong)UILabel *titlLabel;
19 | @property(nonatomic, strong)UILabel *subTitleLabel;
20 | @end
21 |
22 | @interface MapSearchViewController ()
23 | @property(nonatomic, strong)AMapSearchAPI *search;
24 | @property(nonatomic, strong)MAMapView *mapView;
25 | @property(nonatomic, strong)UISearchBar *searchBar;
26 | @property(nonatomic, strong)UITableView *table;
27 | @property(nonatomic, strong)POIAnnotation *searchModel;
28 | @property(copy, nonatomic)NSArray *searchArr;
29 | @property(nonatomic, strong)POIAnnotation *poiAnnotation;
30 | @end
31 |
32 | @implementation MapSearchViewController
33 |
34 | - (void)viewDidLoad {
35 | [super viewDidLoad];
36 | self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
37 | self.view.backgroundColor = [UIColor whiteColor];
38 | [self initMapView];
39 | self.navigationItem.titleView = self.searchBar;
40 | self.search = [[AMapSearchAPI alloc] init];
41 | self.search.delegate = self;
42 | }
43 |
44 | - (void)initMapView{
45 | self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
46 | self.mapView.delegate = self;
47 | self.mapView.showsUserLocation = NO;
48 | self.mapView.userTrackingMode = MAUserTrackingModeFollow;
49 | [self.mapView setZoomLevel:17 animated:YES];
50 | self.mapView.touchPOIEnabled = YES;
51 | [self.view addSubview:self.mapView];
52 |
53 | UIView *zoomPannelView = [self makeZoomPannelView];
54 | [self.mapView addSubview:zoomPannelView];
55 | }
56 |
57 | - (void)backItemAction{
58 | [self.navigationController popViewControllerAnimated:YES];
59 | }
60 |
61 | - (UIView *)makeZoomPannelView
62 | {
63 | UIView *ret = [[UIView alloc] initWithFrame:CGRectMake(self.view.frame.size.width - 60, self.view.frame.size.height - 105, 53, 98)];
64 | ret.backgroundColor = [UIColor lightGrayColor];
65 |
66 | UIButton *incBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 53, 49)];
67 | incBtn.backgroundColor = [UIColor whiteColor];
68 | [incBtn setTitle:@"+" forState:UIControlStateNormal];
69 | incBtn.titleLabel.font = [UIFont systemFontOfSize:30];
70 | [incBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
71 | [incBtn addTarget:self action:@selector(zoomPlusAction) forControlEvents:UIControlEventTouchUpInside];
72 |
73 | UIButton *decBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 51, 53, 49)];
74 | decBtn.backgroundColor = [UIColor whiteColor];
75 | [decBtn setTitle:@"-" forState:UIControlStateNormal];
76 | decBtn.titleLabel.font = [UIFont systemFontOfSize:30];
77 | [decBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
78 | [decBtn addTarget:self action:@selector(zoomMinusAction) forControlEvents:UIControlEventTouchUpInside];
79 |
80 |
81 | [ret addSubview:incBtn];
82 | [ret addSubview:decBtn];
83 |
84 | return ret;
85 | }
86 |
87 | - (void)zoomPlusAction
88 | {
89 | CGFloat oldZoom = self.mapView.zoomLevel;
90 | [self.mapView setZoomLevel:(oldZoom + 1) animated:YES];
91 | self.mapView.showsScale = YES;
92 | }
93 |
94 | - (void)zoomMinusAction
95 | {
96 | CGFloat oldZoom = self.mapView.zoomLevel;
97 | [self.mapView setZoomLevel:(oldZoom - 1) animated:YES];
98 | self.mapView.showsScale = NO;
99 | }
100 |
101 |
102 | - (UITableView *)table{
103 | if (!_table) {
104 | _table = ({
105 | UITableView *table = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
106 | [self.view addSubview:table];
107 | table.delegate =self;
108 | table.dataSource =self;
109 |
110 | table;
111 | });
112 | }
113 | return _table;
114 | }
115 |
116 | - (UISearchBar *)searchBar{
117 | if (!_searchBar) {
118 | _searchBar = ({
119 | UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
120 | searchBar.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
121 | searchBar.barStyle = UIBarStyleDefault;
122 | searchBar.delegate = self;
123 | searchBar.placeholder = @"输入查询地址";
124 | searchBar.keyboardType = UIKeyboardTypeDefault;
125 | [searchBar sizeToFit];
126 | searchBar;
127 | });
128 | }
129 | return _searchBar;
130 | }
131 |
132 | #pragma mark - UISearchBarDelegate
133 | - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
134 | {
135 | [self.searchBar setShowsCancelButton:YES];
136 | }
137 |
138 | - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
139 | {
140 | [self.searchBar setShowsCancelButton:NO];
141 | self.table.hidden = false;
142 | }
143 |
144 | - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
145 | {
146 | [self.searchBar resignFirstResponder];
147 | self.table.hidden = YES;
148 | }
149 |
150 | - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
151 | [self.searchBar resignFirstResponder];
152 |
153 | if(self.searchBar.text.length == 0) {
154 | return;
155 | }
156 |
157 | [self searchPoiByKeyword:self.searchBar.text];
158 | }
159 |
160 | #pragma mark - MAMapViewDelegate
161 |
162 | - (void)mapView:(MAMapView *)mapView annotationView:(MAAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
163 | {
164 | id annotation = view.annotation;
165 |
166 | if ([annotation isKindOfClass:[POIAnnotation class]])
167 | {
168 | POIAnnotation *poiAnnotation = (POIAnnotation*)annotation;
169 | if (self.searchCoordinateBlock) {
170 | self.searchCoordinateBlock(poiAnnotation.coordinate);
171 | }
172 | [self.navigationController popViewControllerAnimated:YES];
173 | }
174 |
175 | }
176 |
177 | - (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id)annotation
178 | {
179 |
180 | if ([annotation isKindOfClass:[POIAnnotation class]])
181 | {
182 | static NSString *poiIdentifier = @"poiIdentifier";
183 | MAPinAnnotationView *poiAnnotationView = (MAPinAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:poiIdentifier];
184 | if (poiAnnotationView == nil)
185 | {
186 | poiAnnotationView = [[MAPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:poiIdentifier];
187 | }
188 | poiAnnotationView.draggable = YES;
189 |
190 | poiAnnotationView.canShowCallout = YES;
191 | poiAnnotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeInfoDark];
192 |
193 | return poiAnnotationView;
194 | }
195 |
196 | return nil;
197 | }
198 |
199 | - (POIAnnotation *)annotationForTouchPoi:(MATouchPoi *)touchPoi{
200 | if (touchPoi) {
201 | POIAnnotation *annotation = [[POIAnnotation alloc] init];
202 | annotation.title = touchPoi.name;
203 | annotation.coordinate = touchPoi.coordinate;
204 | return annotation;
205 | }
206 | return nil;
207 | }
208 |
209 | - (void)mapView:(MAMapView *)mapView didTouchPois:(NSArray *)pois{
210 | if (pois.count) {
211 | POIAnnotation *annotation = [self annotationForTouchPoi:pois[0]];
212 | [self.mapView removeAnnotation:(id)self.poiAnnotation];
213 | [self.mapView addAnnotation:(id)annotation];
214 | [self.mapView selectAnnotation:(id)annotation animated:YES];
215 | self.poiAnnotation = annotation;
216 | }
217 | }
218 |
219 | #pragma mark - AMapSearchDelegate
220 | - (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error
221 | {
222 | }
223 |
224 | /* POI 搜索回调. */
225 | - (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response
226 | {
227 | [self.mapView removeAnnotations:self.mapView.annotations];
228 |
229 | if (response.pois.count == 0)
230 | {
231 | return;
232 | }
233 |
234 | NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:response.pois.count];
235 |
236 | [response.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {
237 | [poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];
238 |
239 | }];
240 |
241 | /* 将结果以annotation的形式加载到地图上. */
242 | [self.mapView addAnnotations:poiAnnotations];
243 | self.searchArr = [NSArray arrayWithArray:poiAnnotations];
244 |
245 | /* 如果只有一个结果,设置其为中心点. */
246 | // if (poiAnnotations.count == 1)
247 | // {
248 | // [self.mapView setCenterCoordinate:[poiAnnotations[0] coordinate]];
249 | // }
250 | // /* 如果有多个结果, 设置地图使所有的annotation都可见. */
251 | // else
252 | // {
253 | // [self.mapView showAnnotations:poiAnnotations animated:NO];
254 | // }
255 | [self.table reloadData];
256 | }
257 |
258 | #pragma mark - tableviewDelegate
259 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
260 | return 70;
261 | }
262 |
263 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
264 | return self.searchArr.count;
265 | }
266 |
267 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
268 | return 1;
269 | }
270 |
271 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
272 | static NSString *iden = @"iden";
273 | MapSearchCell *cell = [tableView dequeueReusableCellWithIdentifier:iden];
274 | if (!cell) {
275 | cell = [[MapSearchCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:iden];
276 | }
277 | POIAnnotation *annotation = self.searchArr[indexPath.row];
278 | cell.titlLabel.text = annotation.title;
279 | cell.subTitleLabel.text = annotation.subtitle;
280 | return cell;
281 | }
282 |
283 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
284 | [tableView deselectRowAtIndexPath:indexPath animated:YES];
285 | self.table.hidden = YES;
286 | POIAnnotation *annotation = self.searchArr[indexPath.row];
287 | [self.mapView removeAnnotation:(id)self.poiAnnotation];
288 | [self.mapView addAnnotation:(id)annotation];
289 | [self.mapView selectAnnotation:(id)annotation animated:YES];
290 | self.poiAnnotation = annotation;
291 |
292 | }
293 |
294 | #pragma mark - Utility
295 | /* 根据关键字来搜索POI. */
296 | - (void)searchPoiByKeyword:(NSString *)keyword
297 | {
298 | AMapPOIKeywordsSearchRequest *request = [[AMapPOIKeywordsSearchRequest alloc] init];
299 | request.keywords = keyword;
300 | request.requireExtension = YES;
301 | //
302 | // /* 搜索SDK 3.2.0 中新增加的功能,只搜索本城市的POI。*/
303 | request.cityLimit = YES;
304 | request.requireSubPOIs = YES;
305 |
306 | [self.search AMapPOIKeywordsSearch:request];
307 | }
308 |
309 | @end
310 |
311 |
312 |
313 | @implementation MapSearchCell
314 | - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
315 | if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
316 | UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, self.frame.size.width-20, 20)];
317 | [self.contentView addSubview:titleLabel];
318 | _titlLabel = titleLabel;
319 |
320 | UILabel *subTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, titleLabel.frame.size.width, 40)];
321 | subTitleLabel.numberOfLines = 0;
322 | subTitleLabel.font = [UIFont systemFontOfSize:12];
323 | subTitleLabel.textColor = [UIColor grayColor];
324 | [self.contentView addSubview:subTitleLabel];
325 | _subTitleLabel = subTitleLabel;
326 |
327 | }
328 | return self;
329 | }
330 |
331 | @end
332 |
333 |
--------------------------------------------------------------------------------
/DingtalkUI.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 48;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2D5FAC0AC6DB118E9D3DCBB4 /* Pods_DingtalkUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8AEECC7D926BD26D5CC5AC8 /* Pods_DingtalkUI.framework */; };
11 | 647CF7DD1FC3F32000DF3739 /* DingtalkUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 647CF7DC1FC3F32000DF3739 /* DingtalkUI.m */; };
12 | 647CF7E11FC3F32000DF3739 /* DingtalkUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 647CF7DB1FC3F32000DF3739 /* DingtalkUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
13 | 647CF7E91FC3F75A00DF3739 /* CoordinateForm.h in Headers */ = {isa = PBXBuildFile; fileRef = 647CF7E71FC3F75A00DF3739 /* CoordinateForm.h */; };
14 | 647CF7EA1FC3F75A00DF3739 /* CoordinateForm.m in Sources */ = {isa = PBXBuildFile; fileRef = 647CF7E81FC3F75A00DF3739 /* CoordinateForm.m */; };
15 | 64EA6EB61FCBEE2300F76E70 /* DingtalkPluginConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EA6EAD1FCBEE2200F76E70 /* DingtalkPluginConfig.m */; };
16 | 64EA6EB71FCBEE2300F76E70 /* POIAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EA6EAE1FCBEE2200F76E70 /* POIAnnotation.m */; };
17 | 64EA6EB81FCBEE2300F76E70 /* MapSearchViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 64EA6EAF1FCBEE2200F76E70 /* MapSearchViewController.h */; };
18 | 64EA6EB91FCBEE2300F76E70 /* MapSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EA6EB01FCBEE2200F76E70 /* MapSearchViewController.m */; };
19 | 64EA6EBA1FCBEE2300F76E70 /* DingtalkPod.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EA6EB11FCBEE2300F76E70 /* DingtalkPod.m */; };
20 | 64EA6EBB1FCBEE2300F76E70 /* POIAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 64EA6EB21FCBEE2300F76E70 /* POIAnnotation.h */; };
21 | 64EA6EBC1FCBEE2300F76E70 /* dingdingDylib.m in Sources */ = {isa = PBXBuildFile; fileRef = 64EA6EB31FCBEE2300F76E70 /* dingdingDylib.m */; };
22 | 64EA6EBD1FCBEE2300F76E70 /* DingtalkPod.h in Headers */ = {isa = PBXBuildFile; fileRef = 64EA6EB41FCBEE2300F76E70 /* DingtalkPod.h */; };
23 | 64EA6EBE1FCBEE2300F76E70 /* DingtalkPluginConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 64EA6EB51FCBEE2300F76E70 /* DingtalkPluginConfig.h */; };
24 | /* End PBXBuildFile section */
25 |
26 | /* Begin PBXFileReference section */
27 | 4DCEA75CC3D7817BF161B6F3 /* Pods-DingtalkUI.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DingtalkUI.release.xcconfig"; path = "Pods/Target Support Files/Pods-DingtalkUI/Pods-DingtalkUI.release.xcconfig"; sourceTree = ""; };
28 | 647CF7D81FC3F32000DF3739 /* DingtalkUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DingtalkUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
29 | 647CF7DB1FC3F32000DF3739 /* DingtalkUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DingtalkUI.h; sourceTree = ""; };
30 | 647CF7DC1FC3F32000DF3739 /* DingtalkUI.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DingtalkUI.m; sourceTree = ""; };
31 | 647CF7E01FC3F32000DF3739 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
32 | 647CF7E71FC3F75A00DF3739 /* CoordinateForm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoordinateForm.h; sourceTree = ""; };
33 | 647CF7E81FC3F75A00DF3739 /* CoordinateForm.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CoordinateForm.m; sourceTree = ""; };
34 | 64EA6EAD1FCBEE2200F76E70 /* DingtalkPluginConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DingtalkPluginConfig.m; sourceTree = ""; };
35 | 64EA6EAE1FCBEE2200F76E70 /* POIAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = POIAnnotation.m; sourceTree = ""; };
36 | 64EA6EAF1FCBEE2200F76E70 /* MapSearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapSearchViewController.h; sourceTree = ""; };
37 | 64EA6EB01FCBEE2200F76E70 /* MapSearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapSearchViewController.m; sourceTree = ""; };
38 | 64EA6EB11FCBEE2300F76E70 /* DingtalkPod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DingtalkPod.m; sourceTree = ""; };
39 | 64EA6EB21FCBEE2300F76E70 /* POIAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = POIAnnotation.h; sourceTree = ""; };
40 | 64EA6EB31FCBEE2300F76E70 /* dingdingDylib.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = dingdingDylib.m; sourceTree = ""; };
41 | 64EA6EB41FCBEE2300F76E70 /* DingtalkPod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DingtalkPod.h; sourceTree = ""; };
42 | 64EA6EB51FCBEE2300F76E70 /* DingtalkPluginConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DingtalkPluginConfig.h; sourceTree = ""; };
43 | F7A5CAC06DC5BBE1965CA117 /* Pods-DingtalkUI.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DingtalkUI.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DingtalkUI/Pods-DingtalkUI.debug.xcconfig"; sourceTree = ""; };
44 | F8AEECC7D926BD26D5CC5AC8 /* Pods_DingtalkUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DingtalkUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 647CF7D41FC3F32000DF3739 /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | 2D5FAC0AC6DB118E9D3DCBB4 /* Pods_DingtalkUI.framework in Frameworks */,
53 | );
54 | runOnlyForDeploymentPostprocessing = 0;
55 | };
56 | /* End PBXFrameworksBuildPhase section */
57 |
58 | /* Begin PBXGroup section */
59 | 0DDD9342B5776E1FBC5B38E7 /* Frameworks */ = {
60 | isa = PBXGroup;
61 | children = (
62 | F8AEECC7D926BD26D5CC5AC8 /* Pods_DingtalkUI.framework */,
63 | );
64 | name = Frameworks;
65 | sourceTree = "";
66 | };
67 | 5AE3728BC7025D8FD52C3CB0 /* Pods */ = {
68 | isa = PBXGroup;
69 | children = (
70 | F7A5CAC06DC5BBE1965CA117 /* Pods-DingtalkUI.debug.xcconfig */,
71 | 4DCEA75CC3D7817BF161B6F3 /* Pods-DingtalkUI.release.xcconfig */,
72 | );
73 | name = Pods;
74 | sourceTree = "";
75 | };
76 | 647CF7CE1FC3F31F00DF3739 = {
77 | isa = PBXGroup;
78 | children = (
79 | 647CF7DA1FC3F32000DF3739 /* DingtalkUI */,
80 | 647CF7D91FC3F32000DF3739 /* Products */,
81 | 5AE3728BC7025D8FD52C3CB0 /* Pods */,
82 | 0DDD9342B5776E1FBC5B38E7 /* Frameworks */,
83 | );
84 | sourceTree = "";
85 | };
86 | 647CF7D91FC3F32000DF3739 /* Products */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 647CF7D81FC3F32000DF3739 /* DingtalkUI.framework */,
90 | );
91 | name = Products;
92 | sourceTree = "";
93 | };
94 | 647CF7DA1FC3F32000DF3739 /* DingtalkUI */ = {
95 | isa = PBXGroup;
96 | children = (
97 | 647CF7DB1FC3F32000DF3739 /* DingtalkUI.h */,
98 | 647CF7DC1FC3F32000DF3739 /* DingtalkUI.m */,
99 | 647CF7E01FC3F32000DF3739 /* Info.plist */,
100 | 647CF7E71FC3F75A00DF3739 /* CoordinateForm.h */,
101 | 647CF7E81FC3F75A00DF3739 /* CoordinateForm.m */,
102 | 64EA6EB31FCBEE2300F76E70 /* dingdingDylib.m */,
103 | 64EA6EB51FCBEE2300F76E70 /* DingtalkPluginConfig.h */,
104 | 64EA6EAD1FCBEE2200F76E70 /* DingtalkPluginConfig.m */,
105 | 64EA6EB41FCBEE2300F76E70 /* DingtalkPod.h */,
106 | 64EA6EB11FCBEE2300F76E70 /* DingtalkPod.m */,
107 | 64EA6EAF1FCBEE2200F76E70 /* MapSearchViewController.h */,
108 | 64EA6EB01FCBEE2200F76E70 /* MapSearchViewController.m */,
109 | 64EA6EB21FCBEE2300F76E70 /* POIAnnotation.h */,
110 | 64EA6EAE1FCBEE2200F76E70 /* POIAnnotation.m */,
111 | );
112 | path = DingtalkUI;
113 | sourceTree = "";
114 | };
115 | /* End PBXGroup section */
116 |
117 | /* Begin PBXHeadersBuildPhase section */
118 | 647CF7D51FC3F32000DF3739 /* Headers */ = {
119 | isa = PBXHeadersBuildPhase;
120 | buildActionMask = 2147483647;
121 | files = (
122 | 64EA6EBD1FCBEE2300F76E70 /* DingtalkPod.h in Headers */,
123 | 64EA6EBB1FCBEE2300F76E70 /* POIAnnotation.h in Headers */,
124 | 647CF7E91FC3F75A00DF3739 /* CoordinateForm.h in Headers */,
125 | 64EA6EBE1FCBEE2300F76E70 /* DingtalkPluginConfig.h in Headers */,
126 | 64EA6EB81FCBEE2300F76E70 /* MapSearchViewController.h in Headers */,
127 | 647CF7E11FC3F32000DF3739 /* DingtalkUI.h in Headers */,
128 | );
129 | runOnlyForDeploymentPostprocessing = 0;
130 | };
131 | /* End PBXHeadersBuildPhase section */
132 |
133 | /* Begin PBXNativeTarget section */
134 | 647CF7D71FC3F32000DF3739 /* DingtalkUI */ = {
135 | isa = PBXNativeTarget;
136 | buildConfigurationList = 647CF7E41FC3F32000DF3739 /* Build configuration list for PBXNativeTarget "DingtalkUI" */;
137 | buildPhases = (
138 | C529D1EAB4D9DDA20227CFCB /* [CP] Check Pods Manifest.lock */,
139 | 647CF7D31FC3F32000DF3739 /* Sources */,
140 | 647CF7D41FC3F32000DF3739 /* Frameworks */,
141 | 647CF7D51FC3F32000DF3739 /* Headers */,
142 | 647CF7D61FC3F32000DF3739 /* Resources */,
143 | 039F0D4D24D39B07C06B41BF /* [CP] Copy Pods Resources */,
144 | );
145 | buildRules = (
146 | );
147 | dependencies = (
148 | );
149 | name = DingtalkUI;
150 | productName = DingtalkUI;
151 | productReference = 647CF7D81FC3F32000DF3739 /* DingtalkUI.framework */;
152 | productType = "com.apple.product-type.framework";
153 | };
154 | /* End PBXNativeTarget section */
155 |
156 | /* Begin PBXProject section */
157 | 647CF7CF1FC3F31F00DF3739 /* Project object */ = {
158 | isa = PBXProject;
159 | attributes = {
160 | LastUpgradeCheck = 0910;
161 | ORGANIZATIONNAME = com.laiwang.DingTalk;
162 | TargetAttributes = {
163 | 647CF7D71FC3F32000DF3739 = {
164 | CreatedOnToolsVersion = 9.1;
165 | ProvisioningStyle = Automatic;
166 | };
167 | };
168 | };
169 | buildConfigurationList = 647CF7D21FC3F31F00DF3739 /* Build configuration list for PBXProject "DingtalkUI" */;
170 | compatibilityVersion = "Xcode 8.0";
171 | developmentRegion = en;
172 | hasScannedForEncodings = 0;
173 | knownRegions = (
174 | en,
175 | );
176 | mainGroup = 647CF7CE1FC3F31F00DF3739;
177 | productRefGroup = 647CF7D91FC3F32000DF3739 /* Products */;
178 | projectDirPath = "";
179 | projectRoot = "";
180 | targets = (
181 | 647CF7D71FC3F32000DF3739 /* DingtalkUI */,
182 | );
183 | };
184 | /* End PBXProject section */
185 |
186 | /* Begin PBXResourcesBuildPhase section */
187 | 647CF7D61FC3F32000DF3739 /* Resources */ = {
188 | isa = PBXResourcesBuildPhase;
189 | buildActionMask = 2147483647;
190 | files = (
191 | );
192 | runOnlyForDeploymentPostprocessing = 0;
193 | };
194 | /* End PBXResourcesBuildPhase section */
195 |
196 | /* Begin PBXShellScriptBuildPhase section */
197 | 039F0D4D24D39B07C06B41BF /* [CP] Copy Pods Resources */ = {
198 | isa = PBXShellScriptBuildPhase;
199 | buildActionMask = 2147483647;
200 | files = (
201 | );
202 | inputPaths = (
203 | );
204 | name = "[CP] Copy Pods Resources";
205 | outputPaths = (
206 | );
207 | runOnlyForDeploymentPostprocessing = 0;
208 | shellPath = /bin/sh;
209 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DingtalkUI/Pods-DingtalkUI-resources.sh\"\n";
210 | showEnvVarsInLog = 0;
211 | };
212 | C529D1EAB4D9DDA20227CFCB /* [CP] Check Pods Manifest.lock */ = {
213 | isa = PBXShellScriptBuildPhase;
214 | buildActionMask = 2147483647;
215 | files = (
216 | );
217 | inputPaths = (
218 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
219 | "${PODS_ROOT}/Manifest.lock",
220 | );
221 | name = "[CP] Check Pods Manifest.lock";
222 | outputPaths = (
223 | "$(DERIVED_FILE_DIR)/Pods-DingtalkUI-checkManifestLockResult.txt",
224 | );
225 | runOnlyForDeploymentPostprocessing = 0;
226 | shellPath = /bin/sh;
227 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
228 | showEnvVarsInLog = 0;
229 | };
230 | /* End PBXShellScriptBuildPhase section */
231 |
232 | /* Begin PBXSourcesBuildPhase section */
233 | 647CF7D31FC3F32000DF3739 /* Sources */ = {
234 | isa = PBXSourcesBuildPhase;
235 | buildActionMask = 2147483647;
236 | files = (
237 | 647CF7DD1FC3F32000DF3739 /* DingtalkUI.m in Sources */,
238 | 64EA6EB71FCBEE2300F76E70 /* POIAnnotation.m in Sources */,
239 | 64EA6EB91FCBEE2300F76E70 /* MapSearchViewController.m in Sources */,
240 | 64EA6EB61FCBEE2300F76E70 /* DingtalkPluginConfig.m in Sources */,
241 | 64EA6EBC1FCBEE2300F76E70 /* dingdingDylib.m in Sources */,
242 | 647CF7EA1FC3F75A00DF3739 /* CoordinateForm.m in Sources */,
243 | 64EA6EBA1FCBEE2300F76E70 /* DingtalkPod.m in Sources */,
244 | );
245 | runOnlyForDeploymentPostprocessing = 0;
246 | };
247 | /* End PBXSourcesBuildPhase section */
248 |
249 | /* Begin XCBuildConfiguration section */
250 | 647CF7E21FC3F32000DF3739 /* Debug */ = {
251 | isa = XCBuildConfiguration;
252 | buildSettings = {
253 | ALWAYS_SEARCH_USER_PATHS = NO;
254 | CLANG_ANALYZER_NONNULL = YES;
255 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
256 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
257 | CLANG_CXX_LIBRARY = "libc++";
258 | CLANG_ENABLE_MODULES = YES;
259 | CLANG_ENABLE_OBJC_ARC = YES;
260 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
261 | CLANG_WARN_BOOL_CONVERSION = YES;
262 | CLANG_WARN_COMMA = YES;
263 | CLANG_WARN_CONSTANT_CONVERSION = YES;
264 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
265 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
266 | CLANG_WARN_EMPTY_BODY = YES;
267 | CLANG_WARN_ENUM_CONVERSION = YES;
268 | CLANG_WARN_INFINITE_RECURSION = YES;
269 | CLANG_WARN_INT_CONVERSION = YES;
270 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
271 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
272 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
273 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
274 | CLANG_WARN_STRICT_PROTOTYPES = YES;
275 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
276 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
277 | CLANG_WARN_UNREACHABLE_CODE = YES;
278 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
279 | CODE_SIGN_IDENTITY = "iPhone Developer";
280 | COPY_PHASE_STRIP = NO;
281 | CURRENT_PROJECT_VERSION = 1;
282 | DEBUG_INFORMATION_FORMAT = dwarf;
283 | ENABLE_STRICT_OBJC_MSGSEND = YES;
284 | ENABLE_TESTABILITY = YES;
285 | GCC_C_LANGUAGE_STANDARD = gnu11;
286 | GCC_DYNAMIC_NO_PIC = NO;
287 | GCC_NO_COMMON_BLOCKS = YES;
288 | GCC_OPTIMIZATION_LEVEL = 0;
289 | GCC_PREPROCESSOR_DEFINITIONS = (
290 | "DEBUG=1",
291 | "$(inherited)",
292 | );
293 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
294 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
295 | GCC_WARN_UNDECLARED_SELECTOR = YES;
296 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
297 | GCC_WARN_UNUSED_FUNCTION = YES;
298 | GCC_WARN_UNUSED_VARIABLE = YES;
299 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
300 | MTL_ENABLE_DEBUG_INFO = YES;
301 | ONLY_ACTIVE_ARCH = YES;
302 | SDKROOT = iphoneos;
303 | VERSIONING_SYSTEM = "apple-generic";
304 | VERSION_INFO_PREFIX = "";
305 | };
306 | name = Debug;
307 | };
308 | 647CF7E31FC3F32000DF3739 /* Release */ = {
309 | isa = XCBuildConfiguration;
310 | buildSettings = {
311 | ALWAYS_SEARCH_USER_PATHS = NO;
312 | CLANG_ANALYZER_NONNULL = YES;
313 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
314 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
315 | CLANG_CXX_LIBRARY = "libc++";
316 | CLANG_ENABLE_MODULES = YES;
317 | CLANG_ENABLE_OBJC_ARC = YES;
318 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
319 | CLANG_WARN_BOOL_CONVERSION = YES;
320 | CLANG_WARN_COMMA = YES;
321 | CLANG_WARN_CONSTANT_CONVERSION = YES;
322 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
323 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
324 | CLANG_WARN_EMPTY_BODY = YES;
325 | CLANG_WARN_ENUM_CONVERSION = YES;
326 | CLANG_WARN_INFINITE_RECURSION = YES;
327 | CLANG_WARN_INT_CONVERSION = YES;
328 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
329 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
330 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
331 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
332 | CLANG_WARN_STRICT_PROTOTYPES = YES;
333 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
334 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
335 | CLANG_WARN_UNREACHABLE_CODE = YES;
336 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
337 | CODE_SIGN_IDENTITY = "iPhone Developer";
338 | COPY_PHASE_STRIP = NO;
339 | CURRENT_PROJECT_VERSION = 1;
340 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
341 | ENABLE_NS_ASSERTIONS = NO;
342 | ENABLE_STRICT_OBJC_MSGSEND = YES;
343 | GCC_C_LANGUAGE_STANDARD = gnu11;
344 | GCC_NO_COMMON_BLOCKS = YES;
345 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
346 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
347 | GCC_WARN_UNDECLARED_SELECTOR = YES;
348 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
349 | GCC_WARN_UNUSED_FUNCTION = YES;
350 | GCC_WARN_UNUSED_VARIABLE = YES;
351 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
352 | MTL_ENABLE_DEBUG_INFO = NO;
353 | SDKROOT = iphoneos;
354 | VALIDATE_PRODUCT = YES;
355 | VERSIONING_SYSTEM = "apple-generic";
356 | VERSION_INFO_PREFIX = "";
357 | };
358 | name = Release;
359 | };
360 | 647CF7E51FC3F32000DF3739 /* Debug */ = {
361 | isa = XCBuildConfiguration;
362 | baseConfigurationReference = F7A5CAC06DC5BBE1965CA117 /* Pods-DingtalkUI.debug.xcconfig */;
363 | buildSettings = {
364 | CODE_SIGN_IDENTITY = "";
365 | CODE_SIGN_STYLE = Automatic;
366 | DEFINES_MODULE = YES;
367 | DEVELOPMENT_TEAM = UJLH85825A;
368 | DYLIB_COMPATIBILITY_VERSION = 1;
369 | DYLIB_CURRENT_VERSION = 1;
370 | DYLIB_INSTALL_NAME_BASE = "@rpath";
371 | INFOPLIST_FILE = DingtalkUI/Info.plist;
372 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
373 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
374 | PRODUCT_BUNDLE_IDENTIFIER = com.laiwang.DingtalkUI;
375 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
376 | SKIP_INSTALL = YES;
377 | TARGETED_DEVICE_FAMILY = "1,2";
378 | };
379 | name = Debug;
380 | };
381 | 647CF7E61FC3F32000DF3739 /* Release */ = {
382 | isa = XCBuildConfiguration;
383 | baseConfigurationReference = 4DCEA75CC3D7817BF161B6F3 /* Pods-DingtalkUI.release.xcconfig */;
384 | buildSettings = {
385 | CODE_SIGN_IDENTITY = "";
386 | CODE_SIGN_STYLE = Automatic;
387 | DEFINES_MODULE = YES;
388 | DEVELOPMENT_TEAM = UJLH85825A;
389 | DYLIB_COMPATIBILITY_VERSION = 1;
390 | DYLIB_CURRENT_VERSION = 1;
391 | DYLIB_INSTALL_NAME_BASE = "@rpath";
392 | INFOPLIST_FILE = DingtalkUI/Info.plist;
393 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
394 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
395 | PRODUCT_BUNDLE_IDENTIFIER = com.laiwang.DingtalkUI;
396 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
397 | SKIP_INSTALL = YES;
398 | TARGETED_DEVICE_FAMILY = "1,2";
399 | };
400 | name = Release;
401 | };
402 | /* End XCBuildConfiguration section */
403 |
404 | /* Begin XCConfigurationList section */
405 | 647CF7D21FC3F31F00DF3739 /* Build configuration list for PBXProject "DingtalkUI" */ = {
406 | isa = XCConfigurationList;
407 | buildConfigurations = (
408 | 647CF7E21FC3F32000DF3739 /* Debug */,
409 | 647CF7E31FC3F32000DF3739 /* Release */,
410 | );
411 | defaultConfigurationIsVisible = 0;
412 | defaultConfigurationName = Release;
413 | };
414 | 647CF7E41FC3F32000DF3739 /* Build configuration list for PBXNativeTarget "DingtalkUI" */ = {
415 | isa = XCConfigurationList;
416 | buildConfigurations = (
417 | 647CF7E51FC3F32000DF3739 /* Debug */,
418 | 647CF7E61FC3F32000DF3739 /* Release */,
419 | );
420 | defaultConfigurationIsVisible = 0;
421 | defaultConfigurationName = Release;
422 | };
423 | /* End XCConfigurationList section */
424 | };
425 | rootObject = 647CF7CF1FC3F31F00DF3739 /* Project object */;
426 | }
427 |
--------------------------------------------------------------------------------