├── .DS_Store ├── Demo-Server ├── .DS_Store ├── Demo-Server.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcuserdata │ │ │ └── seer.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── seer.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── Demo-Server │ ├── .DS_Store │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── .DS_Store │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── database__easiPadApp_76pt.png │ │ │ ├── database__easiPadApp_76pt@2x.png │ │ │ ├── database__easiPadNotifications_20pt.png │ │ │ ├── database__easiPadNotifications_20pt@2x.png │ │ │ ├── database__easiPadProApp_83.5pt@2x.png │ │ │ ├── database__easiPadSpootlight5_29pt.png │ │ │ ├── database__easiPadSpootlight5_29pt@2x.png │ │ │ ├── database__easiPadSpootlight7_40pt.png │ │ │ ├── database__easiPadSpootlight7_40pt@2x.png │ │ │ ├── database__easiPhoneApp_60pt@2x.png │ │ │ ├── database__easiPhoneApp_60pt@3x.png │ │ │ ├── database__easiPhoneNotification_20pt@2x.png │ │ │ ├── database__easiPhoneNotification_20pt@3x.png │ │ │ ├── database__easiPhoneSpootlight5_29pt@2x.png │ │ │ ├── database__easiPhoneSpootlight5_29pt@3x.png │ │ │ ├── database__easiPhoneSpootlight7_40pt@2x.png │ │ │ ├── database__easiPhoneSpootlight7_40pt@3x.png │ │ │ └── database__easstore_1024pt.png │ │ ├── Contents.json │ │ ├── reduce.imageset │ │ │ ├── Contents.json │ │ │ ├── jian-2.png │ │ │ └── jian.png │ │ ├── start.imageset │ │ │ ├── Contents.json │ │ │ ├── kaishi-4.png │ │ │ └── kaishi-5.png │ │ ├── stop.imageset │ │ │ ├── Contents.json │ │ │ ├── weibiaoti517-2.png │ │ │ └── weibiaoti517.png │ │ └── to_my_location.imageset │ │ │ ├── Contents.json │ │ │ ├── target-lock-6.png │ │ │ └── target-lock-7.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Bridging.h │ ├── Info.plist │ ├── Tools │ │ ├── ECLocationTransform.h │ │ └── ECLocationTransform.m │ └── ViewController.swift ├── Demo-ServerTests │ ├── Demo_ServerTests.swift │ └── Info.plist ├── Demo-ServerUITests │ ├── Demo_ServerUITests.swift │ └── Info.plist ├── Podfile └── location.gpx ├── LICENSE ├── README.md ├── dynamicLocation.py └── target_project ├── .DS_Store ├── Podfile ├── location.gpx ├── target_project.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ └── seer.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── seer.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── target_project ├── .DS_Store ├── AppDelegate.swift ├── Assets.xcassets │ ├── .DS_Store │ ├── AppIcon.imageset │ │ └── Contents.json │ ├── Contents.json │ ├── reduce.imageset │ │ ├── Contents.json │ │ ├── jian-2.png │ │ └── jian.png │ ├── start.imageset │ │ ├── Contents.json │ │ ├── kaishi-4.png │ │ └── kaishi-5.png │ ├── stop.imageset │ │ ├── Contents.json │ │ ├── weibiaoti517-2.png │ │ └── weibiaoti517.png │ └── to_my_location.imageset │ │ ├── Contents.json │ │ ├── target-lock-6.png │ │ └── target-lock-7.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Bridging-Header.h ├── Info.plist └── ViewController.swift ├── target_projectTests ├── Info.plist └── target_projectTests.swift └── target_projectUITests ├── Info.plist └── target_projectUITests.swift /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/.DS_Store -------------------------------------------------------------------------------- /Demo-Server/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/.DS_Store -------------------------------------------------------------------------------- /Demo-Server/Demo-Server.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0A7E1A30223F8285005946C3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7E1A2F223F8285005946C3 /* AppDelegate.swift */; }; 11 | 0A7E1A32223F8285005946C3 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7E1A31223F8285005946C3 /* ViewController.swift */; }; 12 | 0A7E1A37223F8286005946C3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0A7E1A36223F8286005946C3 /* Assets.xcassets */; }; 13 | 0A7E1A3A223F8286005946C3 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0A7E1A38223F8286005946C3 /* LaunchScreen.storyboard */; }; 14 | 0A7E1A45223F8286005946C3 /* Demo_ServerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7E1A44223F8286005946C3 /* Demo_ServerTests.swift */; }; 15 | 0A7E1A50223F8286005946C3 /* Demo_ServerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7E1A4F223F8286005946C3 /* Demo_ServerUITests.swift */; }; 16 | 0A7E1A60223F835A005946C3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0A7E1A5E223F835A005946C3 /* Main.storyboard */; }; 17 | 0A7E1A6D2240C65B005946C3 /* ECLocationTransform.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A7E1A6C2240C65B005946C3 /* ECLocationTransform.m */; }; 18 | 7D3192FB9E290B851E5E8279 /* Pods_Demo_ServerUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 774A555225E85097C75C82F4 /* Pods_Demo_ServerUITests.framework */; }; 19 | 8AFFD21ABC8E880644424435 /* Pods_Demo_Server.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1176359CF06D676BC43122DC /* Pods_Demo_Server.framework */; }; 20 | EC234D13962760E1B4983980 /* Pods_Demo_ServerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4815E6F718FF230AF0124B62 /* Pods_Demo_ServerTests.framework */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXContainerItemProxy section */ 24 | 0A7E1A41223F8286005946C3 /* PBXContainerItemProxy */ = { 25 | isa = PBXContainerItemProxy; 26 | containerPortal = 0A7E1A24223F8285005946C3 /* Project object */; 27 | proxyType = 1; 28 | remoteGlobalIDString = 0A7E1A2B223F8285005946C3; 29 | remoteInfo = "Demo-Server"; 30 | }; 31 | 0A7E1A4C223F8286005946C3 /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = 0A7E1A24223F8285005946C3 /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 0A7E1A2B223F8285005946C3; 36 | remoteInfo = "Demo-Server"; 37 | }; 38 | /* End PBXContainerItemProxy section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 0A7E1A2C223F8285005946C3 /* Demo-Server.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Demo-Server.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 0A7E1A2F223F8285005946C3 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 43 | 0A7E1A31223F8285005946C3 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 44 | 0A7E1A36223F8286005946C3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 45 | 0A7E1A39223F8286005946C3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 46 | 0A7E1A3B223F8286005946C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 47 | 0A7E1A40223F8286005946C3 /* Demo-ServerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Demo-ServerTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 0A7E1A44223F8286005946C3 /* Demo_ServerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Demo_ServerTests.swift; sourceTree = ""; }; 49 | 0A7E1A46223F8286005946C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 50 | 0A7E1A4B223F8286005946C3 /* Demo-ServerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Demo-ServerUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 0A7E1A4F223F8286005946C3 /* Demo_ServerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Demo_ServerUITests.swift; sourceTree = ""; }; 52 | 0A7E1A51223F8286005946C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | 0A7E1A5F223F835A005946C3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 54 | 0A7E1A61223F8375005946C3 /* Bridging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bridging.h; sourceTree = ""; }; 55 | 0A7E1A6B2240C65B005946C3 /* ECLocationTransform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ECLocationTransform.h; sourceTree = ""; }; 56 | 0A7E1A6C2240C65B005946C3 /* ECLocationTransform.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ECLocationTransform.m; sourceTree = ""; }; 57 | 1176359CF06D676BC43122DC /* Pods_Demo_Server.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Demo_Server.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | 1D67D5AE6D2642F011F715C7 /* Pods-Demo-Server.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo-Server.release.xcconfig"; path = "Target Support Files/Pods-Demo-Server/Pods-Demo-Server.release.xcconfig"; sourceTree = ""; }; 59 | 4815E6F718FF230AF0124B62 /* Pods_Demo_ServerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Demo_ServerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 774A555225E85097C75C82F4 /* Pods_Demo_ServerUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Demo_ServerUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 61 | 803105D0C2B1D9D8EBB9A267 /* Pods-Demo-ServerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo-ServerTests.debug.xcconfig"; path = "Target Support Files/Pods-Demo-ServerTests/Pods-Demo-ServerTests.debug.xcconfig"; sourceTree = ""; }; 62 | A4DB0025A0FCDE50AF142E7F /* Pods-Demo-ServerUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo-ServerUITests.debug.xcconfig"; path = "Target Support Files/Pods-Demo-ServerUITests/Pods-Demo-ServerUITests.debug.xcconfig"; sourceTree = ""; }; 63 | AE47F1A9C5C7F94C953ABA3F /* Pods-Demo-ServerUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo-ServerUITests.release.xcconfig"; path = "Target Support Files/Pods-Demo-ServerUITests/Pods-Demo-ServerUITests.release.xcconfig"; sourceTree = ""; }; 64 | DBDD9EC748329082852B54E8 /* Pods-Demo-Server.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo-Server.debug.xcconfig"; path = "Target Support Files/Pods-Demo-Server/Pods-Demo-Server.debug.xcconfig"; sourceTree = ""; }; 65 | F3EC995A012BFD693338AC03 /* Pods-Demo-ServerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo-ServerTests.release.xcconfig"; path = "Target Support Files/Pods-Demo-ServerTests/Pods-Demo-ServerTests.release.xcconfig"; sourceTree = ""; }; 66 | /* End PBXFileReference section */ 67 | 68 | /* Begin PBXFrameworksBuildPhase section */ 69 | 0A7E1A29223F8285005946C3 /* Frameworks */ = { 70 | isa = PBXFrameworksBuildPhase; 71 | buildActionMask = 2147483647; 72 | files = ( 73 | 8AFFD21ABC8E880644424435 /* Pods_Demo_Server.framework in Frameworks */, 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | 0A7E1A3D223F8286005946C3 /* Frameworks */ = { 78 | isa = PBXFrameworksBuildPhase; 79 | buildActionMask = 2147483647; 80 | files = ( 81 | EC234D13962760E1B4983980 /* Pods_Demo_ServerTests.framework in Frameworks */, 82 | ); 83 | runOnlyForDeploymentPostprocessing = 0; 84 | }; 85 | 0A7E1A48223F8286005946C3 /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | 7D3192FB9E290B851E5E8279 /* Pods_Demo_ServerUITests.framework in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | /* End PBXFrameworksBuildPhase section */ 94 | 95 | /* Begin PBXGroup section */ 96 | 0A7E1A23223F8285005946C3 = { 97 | isa = PBXGroup; 98 | children = ( 99 | 0A7E1A2E223F8285005946C3 /* Demo-Server */, 100 | 0A7E1A43223F8286005946C3 /* Demo-ServerTests */, 101 | 0A7E1A4E223F8286005946C3 /* Demo-ServerUITests */, 102 | 0A7E1A2D223F8285005946C3 /* Products */, 103 | B0B7EABD046E6DD70931F932 /* Pods */, 104 | 7E0C44CC7B76EE604D8F6365 /* Frameworks */, 105 | ); 106 | sourceTree = ""; 107 | }; 108 | 0A7E1A2D223F8285005946C3 /* Products */ = { 109 | isa = PBXGroup; 110 | children = ( 111 | 0A7E1A2C223F8285005946C3 /* Demo-Server.app */, 112 | 0A7E1A40223F8286005946C3 /* Demo-ServerTests.xctest */, 113 | 0A7E1A4B223F8286005946C3 /* Demo-ServerUITests.xctest */, 114 | ); 115 | name = Products; 116 | sourceTree = ""; 117 | }; 118 | 0A7E1A2E223F8285005946C3 /* Demo-Server */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 0A7E1A682240C2B9005946C3 /* Tools */, 122 | 0A7E1A2F223F8285005946C3 /* AppDelegate.swift */, 123 | 0A7E1A31223F8285005946C3 /* ViewController.swift */, 124 | 0A7E1A36223F8286005946C3 /* Assets.xcassets */, 125 | 0A7E1A5E223F835A005946C3 /* Main.storyboard */, 126 | 0A7E1A38223F8286005946C3 /* LaunchScreen.storyboard */, 127 | 0A7E1A61223F8375005946C3 /* Bridging.h */, 128 | 0A7E1A3B223F8286005946C3 /* Info.plist */, 129 | ); 130 | path = "Demo-Server"; 131 | sourceTree = ""; 132 | }; 133 | 0A7E1A43223F8286005946C3 /* Demo-ServerTests */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 0A7E1A44223F8286005946C3 /* Demo_ServerTests.swift */, 137 | 0A7E1A46223F8286005946C3 /* Info.plist */, 138 | ); 139 | path = "Demo-ServerTests"; 140 | sourceTree = ""; 141 | }; 142 | 0A7E1A4E223F8286005946C3 /* Demo-ServerUITests */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | 0A7E1A4F223F8286005946C3 /* Demo_ServerUITests.swift */, 146 | 0A7E1A51223F8286005946C3 /* Info.plist */, 147 | ); 148 | path = "Demo-ServerUITests"; 149 | sourceTree = ""; 150 | }; 151 | 0A7E1A682240C2B9005946C3 /* Tools */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | 0A7E1A6B2240C65B005946C3 /* ECLocationTransform.h */, 155 | 0A7E1A6C2240C65B005946C3 /* ECLocationTransform.m */, 156 | ); 157 | path = Tools; 158 | sourceTree = ""; 159 | }; 160 | 7E0C44CC7B76EE604D8F6365 /* Frameworks */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | 1176359CF06D676BC43122DC /* Pods_Demo_Server.framework */, 164 | 4815E6F718FF230AF0124B62 /* Pods_Demo_ServerTests.framework */, 165 | 774A555225E85097C75C82F4 /* Pods_Demo_ServerUITests.framework */, 166 | ); 167 | name = Frameworks; 168 | sourceTree = ""; 169 | }; 170 | B0B7EABD046E6DD70931F932 /* Pods */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | DBDD9EC748329082852B54E8 /* Pods-Demo-Server.debug.xcconfig */, 174 | 1D67D5AE6D2642F011F715C7 /* Pods-Demo-Server.release.xcconfig */, 175 | 803105D0C2B1D9D8EBB9A267 /* Pods-Demo-ServerTests.debug.xcconfig */, 176 | F3EC995A012BFD693338AC03 /* Pods-Demo-ServerTests.release.xcconfig */, 177 | A4DB0025A0FCDE50AF142E7F /* Pods-Demo-ServerUITests.debug.xcconfig */, 178 | AE47F1A9C5C7F94C953ABA3F /* Pods-Demo-ServerUITests.release.xcconfig */, 179 | ); 180 | path = Pods; 181 | sourceTree = ""; 182 | }; 183 | /* End PBXGroup section */ 184 | 185 | /* Begin PBXNativeTarget section */ 186 | 0A7E1A2B223F8285005946C3 /* Demo-Server */ = { 187 | isa = PBXNativeTarget; 188 | buildConfigurationList = 0A7E1A54223F8286005946C3 /* Build configuration list for PBXNativeTarget "Demo-Server" */; 189 | buildPhases = ( 190 | C2C1D5CA96F0835B715B0443 /* [CP] Check Pods Manifest.lock */, 191 | 0A7E1A28223F8285005946C3 /* Sources */, 192 | 0A7E1A29223F8285005946C3 /* Frameworks */, 193 | 0A7E1A2A223F8285005946C3 /* Resources */, 194 | D1B12119F0DA73E9E31CE2F5 /* [CP] Embed Pods Frameworks */, 195 | 509273BD73BB377B4404E5AE /* [CP] Copy Pods Resources */, 196 | ); 197 | buildRules = ( 198 | ); 199 | dependencies = ( 200 | ); 201 | name = "Demo-Server"; 202 | productName = "Demo-Server"; 203 | productReference = 0A7E1A2C223F8285005946C3 /* Demo-Server.app */; 204 | productType = "com.apple.product-type.application"; 205 | }; 206 | 0A7E1A3F223F8286005946C3 /* Demo-ServerTests */ = { 207 | isa = PBXNativeTarget; 208 | buildConfigurationList = 0A7E1A57223F8286005946C3 /* Build configuration list for PBXNativeTarget "Demo-ServerTests" */; 209 | buildPhases = ( 210 | A4DE4F459EE5FE21D2F195F8 /* [CP] Check Pods Manifest.lock */, 211 | 0A7E1A3C223F8286005946C3 /* Sources */, 212 | 0A7E1A3D223F8286005946C3 /* Frameworks */, 213 | 0A7E1A3E223F8286005946C3 /* Resources */, 214 | ); 215 | buildRules = ( 216 | ); 217 | dependencies = ( 218 | 0A7E1A42223F8286005946C3 /* PBXTargetDependency */, 219 | ); 220 | name = "Demo-ServerTests"; 221 | productName = "Demo-ServerTests"; 222 | productReference = 0A7E1A40223F8286005946C3 /* Demo-ServerTests.xctest */; 223 | productType = "com.apple.product-type.bundle.unit-test"; 224 | }; 225 | 0A7E1A4A223F8286005946C3 /* Demo-ServerUITests */ = { 226 | isa = PBXNativeTarget; 227 | buildConfigurationList = 0A7E1A5A223F8286005946C3 /* Build configuration list for PBXNativeTarget "Demo-ServerUITests" */; 228 | buildPhases = ( 229 | EEE5228DD6BEDA05D8863A99 /* [CP] Check Pods Manifest.lock */, 230 | 0A7E1A47223F8286005946C3 /* Sources */, 231 | 0A7E1A48223F8286005946C3 /* Frameworks */, 232 | 0A7E1A49223F8286005946C3 /* Resources */, 233 | ); 234 | buildRules = ( 235 | ); 236 | dependencies = ( 237 | 0A7E1A4D223F8286005946C3 /* PBXTargetDependency */, 238 | ); 239 | name = "Demo-ServerUITests"; 240 | productName = "Demo-ServerUITests"; 241 | productReference = 0A7E1A4B223F8286005946C3 /* Demo-ServerUITests.xctest */; 242 | productType = "com.apple.product-type.bundle.ui-testing"; 243 | }; 244 | /* End PBXNativeTarget section */ 245 | 246 | /* Begin PBXProject section */ 247 | 0A7E1A24223F8285005946C3 /* Project object */ = { 248 | isa = PBXProject; 249 | attributes = { 250 | LastSwiftUpdateCheck = 1010; 251 | LastUpgradeCheck = 1010; 252 | ORGANIZATIONNAME = seer; 253 | TargetAttributes = { 254 | 0A7E1A2B223F8285005946C3 = { 255 | CreatedOnToolsVersion = 10.1; 256 | SystemCapabilities = { 257 | com.apple.BackgroundModes = { 258 | enabled = 1; 259 | }; 260 | }; 261 | }; 262 | 0A7E1A3F223F8286005946C3 = { 263 | CreatedOnToolsVersion = 10.1; 264 | TestTargetID = 0A7E1A2B223F8285005946C3; 265 | }; 266 | 0A7E1A4A223F8286005946C3 = { 267 | CreatedOnToolsVersion = 10.1; 268 | TestTargetID = 0A7E1A2B223F8285005946C3; 269 | }; 270 | }; 271 | }; 272 | buildConfigurationList = 0A7E1A27223F8285005946C3 /* Build configuration list for PBXProject "Demo-Server" */; 273 | compatibilityVersion = "Xcode 9.3"; 274 | developmentRegion = en; 275 | hasScannedForEncodings = 0; 276 | knownRegions = ( 277 | en, 278 | Base, 279 | ); 280 | mainGroup = 0A7E1A23223F8285005946C3; 281 | productRefGroup = 0A7E1A2D223F8285005946C3 /* Products */; 282 | projectDirPath = ""; 283 | projectRoot = ""; 284 | targets = ( 285 | 0A7E1A2B223F8285005946C3 /* Demo-Server */, 286 | 0A7E1A3F223F8286005946C3 /* Demo-ServerTests */, 287 | 0A7E1A4A223F8286005946C3 /* Demo-ServerUITests */, 288 | ); 289 | }; 290 | /* End PBXProject section */ 291 | 292 | /* Begin PBXResourcesBuildPhase section */ 293 | 0A7E1A2A223F8285005946C3 /* Resources */ = { 294 | isa = PBXResourcesBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | 0A7E1A60223F835A005946C3 /* Main.storyboard in Resources */, 298 | 0A7E1A3A223F8286005946C3 /* LaunchScreen.storyboard in Resources */, 299 | 0A7E1A37223F8286005946C3 /* Assets.xcassets in Resources */, 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | }; 303 | 0A7E1A3E223F8286005946C3 /* Resources */ = { 304 | isa = PBXResourcesBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | ); 308 | runOnlyForDeploymentPostprocessing = 0; 309 | }; 310 | 0A7E1A49223F8286005946C3 /* Resources */ = { 311 | isa = PBXResourcesBuildPhase; 312 | buildActionMask = 2147483647; 313 | files = ( 314 | ); 315 | runOnlyForDeploymentPostprocessing = 0; 316 | }; 317 | /* End PBXResourcesBuildPhase section */ 318 | 319 | /* Begin PBXShellScriptBuildPhase section */ 320 | 509273BD73BB377B4404E5AE /* [CP] Copy Pods Resources */ = { 321 | isa = PBXShellScriptBuildPhase; 322 | buildActionMask = 2147483647; 323 | files = ( 324 | ); 325 | inputFileListPaths = ( 326 | ); 327 | inputPaths = ( 328 | "${PODS_ROOT}/Target Support Files/Pods-Demo-Server/Pods-Demo-Server-resources.sh", 329 | "${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle", 330 | "${PODS_ROOT}/BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/mapapi.bundle", 331 | ); 332 | name = "[CP] Copy Pods Resources"; 333 | outputFileListPaths = ( 334 | ); 335 | outputPaths = ( 336 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle", 337 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mapapi.bundle", 338 | ); 339 | runOnlyForDeploymentPostprocessing = 0; 340 | shellPath = /bin/sh; 341 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Demo-Server/Pods-Demo-Server-resources.sh\"\n"; 342 | showEnvVarsInLog = 0; 343 | }; 344 | A4DE4F459EE5FE21D2F195F8 /* [CP] Check Pods Manifest.lock */ = { 345 | isa = PBXShellScriptBuildPhase; 346 | buildActionMask = 2147483647; 347 | files = ( 348 | ); 349 | inputFileListPaths = ( 350 | ); 351 | inputPaths = ( 352 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 353 | "${PODS_ROOT}/Manifest.lock", 354 | ); 355 | name = "[CP] Check Pods Manifest.lock"; 356 | outputFileListPaths = ( 357 | ); 358 | outputPaths = ( 359 | "$(DERIVED_FILE_DIR)/Pods-Demo-ServerTests-checkManifestLockResult.txt", 360 | ); 361 | runOnlyForDeploymentPostprocessing = 0; 362 | shellPath = /bin/sh; 363 | 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"; 364 | showEnvVarsInLog = 0; 365 | }; 366 | C2C1D5CA96F0835B715B0443 /* [CP] Check Pods Manifest.lock */ = { 367 | isa = PBXShellScriptBuildPhase; 368 | buildActionMask = 2147483647; 369 | files = ( 370 | ); 371 | inputFileListPaths = ( 372 | ); 373 | inputPaths = ( 374 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 375 | "${PODS_ROOT}/Manifest.lock", 376 | ); 377 | name = "[CP] Check Pods Manifest.lock"; 378 | outputFileListPaths = ( 379 | ); 380 | outputPaths = ( 381 | "$(DERIVED_FILE_DIR)/Pods-Demo-Server-checkManifestLockResult.txt", 382 | ); 383 | runOnlyForDeploymentPostprocessing = 0; 384 | shellPath = /bin/sh; 385 | 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"; 386 | showEnvVarsInLog = 0; 387 | }; 388 | D1B12119F0DA73E9E31CE2F5 /* [CP] Embed Pods Frameworks */ = { 389 | isa = PBXShellScriptBuildPhase; 390 | buildActionMask = 2147483647; 391 | files = ( 392 | ); 393 | inputFileListPaths = ( 394 | ); 395 | inputPaths = ( 396 | "${PODS_ROOT}/Target Support Files/Pods-Demo-Server/Pods-Demo-Server-frameworks.sh", 397 | "${BUILT_PRODUCTS_DIR}/GCDWebServer/GCDWebServer.framework", 398 | "${BUILT_PRODUCTS_DIR}/SRAirViews/SRAirViews.framework", 399 | "${BUILT_PRODUCTS_DIR}/SRPinView/SRPinView.framework", 400 | ); 401 | name = "[CP] Embed Pods Frameworks"; 402 | outputFileListPaths = ( 403 | ); 404 | outputPaths = ( 405 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GCDWebServer.framework", 406 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SRAirViews.framework", 407 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SRPinView.framework", 408 | ); 409 | runOnlyForDeploymentPostprocessing = 0; 410 | shellPath = /bin/sh; 411 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Demo-Server/Pods-Demo-Server-frameworks.sh\"\n"; 412 | showEnvVarsInLog = 0; 413 | }; 414 | EEE5228DD6BEDA05D8863A99 /* [CP] Check Pods Manifest.lock */ = { 415 | isa = PBXShellScriptBuildPhase; 416 | buildActionMask = 2147483647; 417 | files = ( 418 | ); 419 | inputFileListPaths = ( 420 | ); 421 | inputPaths = ( 422 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 423 | "${PODS_ROOT}/Manifest.lock", 424 | ); 425 | name = "[CP] Check Pods Manifest.lock"; 426 | outputFileListPaths = ( 427 | ); 428 | outputPaths = ( 429 | "$(DERIVED_FILE_DIR)/Pods-Demo-ServerUITests-checkManifestLockResult.txt", 430 | ); 431 | runOnlyForDeploymentPostprocessing = 0; 432 | shellPath = /bin/sh; 433 | 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"; 434 | showEnvVarsInLog = 0; 435 | }; 436 | /* End PBXShellScriptBuildPhase section */ 437 | 438 | /* Begin PBXSourcesBuildPhase section */ 439 | 0A7E1A28223F8285005946C3 /* Sources */ = { 440 | isa = PBXSourcesBuildPhase; 441 | buildActionMask = 2147483647; 442 | files = ( 443 | 0A7E1A32223F8285005946C3 /* ViewController.swift in Sources */, 444 | 0A7E1A30223F8285005946C3 /* AppDelegate.swift in Sources */, 445 | 0A7E1A6D2240C65B005946C3 /* ECLocationTransform.m in Sources */, 446 | ); 447 | runOnlyForDeploymentPostprocessing = 0; 448 | }; 449 | 0A7E1A3C223F8286005946C3 /* Sources */ = { 450 | isa = PBXSourcesBuildPhase; 451 | buildActionMask = 2147483647; 452 | files = ( 453 | 0A7E1A45223F8286005946C3 /* Demo_ServerTests.swift in Sources */, 454 | ); 455 | runOnlyForDeploymentPostprocessing = 0; 456 | }; 457 | 0A7E1A47223F8286005946C3 /* Sources */ = { 458 | isa = PBXSourcesBuildPhase; 459 | buildActionMask = 2147483647; 460 | files = ( 461 | 0A7E1A50223F8286005946C3 /* Demo_ServerUITests.swift in Sources */, 462 | ); 463 | runOnlyForDeploymentPostprocessing = 0; 464 | }; 465 | /* End PBXSourcesBuildPhase section */ 466 | 467 | /* Begin PBXTargetDependency section */ 468 | 0A7E1A42223F8286005946C3 /* PBXTargetDependency */ = { 469 | isa = PBXTargetDependency; 470 | target = 0A7E1A2B223F8285005946C3 /* Demo-Server */; 471 | targetProxy = 0A7E1A41223F8286005946C3 /* PBXContainerItemProxy */; 472 | }; 473 | 0A7E1A4D223F8286005946C3 /* PBXTargetDependency */ = { 474 | isa = PBXTargetDependency; 475 | target = 0A7E1A2B223F8285005946C3 /* Demo-Server */; 476 | targetProxy = 0A7E1A4C223F8286005946C3 /* PBXContainerItemProxy */; 477 | }; 478 | /* End PBXTargetDependency section */ 479 | 480 | /* Begin PBXVariantGroup section */ 481 | 0A7E1A38223F8286005946C3 /* LaunchScreen.storyboard */ = { 482 | isa = PBXVariantGroup; 483 | children = ( 484 | 0A7E1A39223F8286005946C3 /* Base */, 485 | ); 486 | name = LaunchScreen.storyboard; 487 | sourceTree = ""; 488 | }; 489 | 0A7E1A5E223F835A005946C3 /* Main.storyboard */ = { 490 | isa = PBXVariantGroup; 491 | children = ( 492 | 0A7E1A5F223F835A005946C3 /* Base */, 493 | ); 494 | name = Main.storyboard; 495 | sourceTree = ""; 496 | }; 497 | /* End PBXVariantGroup section */ 498 | 499 | /* Begin XCBuildConfiguration section */ 500 | 0A7E1A52223F8286005946C3 /* Debug */ = { 501 | isa = XCBuildConfiguration; 502 | buildSettings = { 503 | ALWAYS_SEARCH_USER_PATHS = NO; 504 | CLANG_ANALYZER_NONNULL = YES; 505 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 506 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 507 | CLANG_CXX_LIBRARY = "libc++"; 508 | CLANG_ENABLE_MODULES = YES; 509 | CLANG_ENABLE_OBJC_ARC = YES; 510 | CLANG_ENABLE_OBJC_WEAK = YES; 511 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 512 | CLANG_WARN_BOOL_CONVERSION = YES; 513 | CLANG_WARN_COMMA = YES; 514 | CLANG_WARN_CONSTANT_CONVERSION = YES; 515 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 516 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 517 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 518 | CLANG_WARN_EMPTY_BODY = YES; 519 | CLANG_WARN_ENUM_CONVERSION = YES; 520 | CLANG_WARN_INFINITE_RECURSION = YES; 521 | CLANG_WARN_INT_CONVERSION = YES; 522 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 523 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 524 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 525 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 526 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 527 | CLANG_WARN_STRICT_PROTOTYPES = YES; 528 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 529 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 530 | CLANG_WARN_UNREACHABLE_CODE = YES; 531 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 532 | CODE_SIGN_IDENTITY = "iPhone Developer"; 533 | COPY_PHASE_STRIP = NO; 534 | DEBUG_INFORMATION_FORMAT = dwarf; 535 | ENABLE_STRICT_OBJC_MSGSEND = YES; 536 | ENABLE_TESTABILITY = YES; 537 | GCC_C_LANGUAGE_STANDARD = gnu11; 538 | GCC_DYNAMIC_NO_PIC = NO; 539 | GCC_NO_COMMON_BLOCKS = YES; 540 | GCC_OPTIMIZATION_LEVEL = 0; 541 | GCC_PREPROCESSOR_DEFINITIONS = ( 542 | "DEBUG=1", 543 | "$(inherited)", 544 | ); 545 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 546 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 547 | GCC_WARN_UNDECLARED_SELECTOR = YES; 548 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 549 | GCC_WARN_UNUSED_FUNCTION = YES; 550 | GCC_WARN_UNUSED_VARIABLE = YES; 551 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 552 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 553 | MTL_FAST_MATH = YES; 554 | ONLY_ACTIVE_ARCH = YES; 555 | SDKROOT = iphoneos; 556 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 557 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 558 | }; 559 | name = Debug; 560 | }; 561 | 0A7E1A53223F8286005946C3 /* Release */ = { 562 | isa = XCBuildConfiguration; 563 | buildSettings = { 564 | ALWAYS_SEARCH_USER_PATHS = NO; 565 | CLANG_ANALYZER_NONNULL = YES; 566 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 567 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 568 | CLANG_CXX_LIBRARY = "libc++"; 569 | CLANG_ENABLE_MODULES = YES; 570 | CLANG_ENABLE_OBJC_ARC = YES; 571 | CLANG_ENABLE_OBJC_WEAK = YES; 572 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 573 | CLANG_WARN_BOOL_CONVERSION = YES; 574 | CLANG_WARN_COMMA = YES; 575 | CLANG_WARN_CONSTANT_CONVERSION = YES; 576 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 577 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 578 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 579 | CLANG_WARN_EMPTY_BODY = YES; 580 | CLANG_WARN_ENUM_CONVERSION = YES; 581 | CLANG_WARN_INFINITE_RECURSION = YES; 582 | CLANG_WARN_INT_CONVERSION = YES; 583 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 584 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 585 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 586 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 587 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 588 | CLANG_WARN_STRICT_PROTOTYPES = YES; 589 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 590 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 591 | CLANG_WARN_UNREACHABLE_CODE = YES; 592 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 593 | CODE_SIGN_IDENTITY = "iPhone Developer"; 594 | COPY_PHASE_STRIP = NO; 595 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 596 | ENABLE_NS_ASSERTIONS = NO; 597 | ENABLE_STRICT_OBJC_MSGSEND = YES; 598 | GCC_C_LANGUAGE_STANDARD = gnu11; 599 | GCC_NO_COMMON_BLOCKS = YES; 600 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 601 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 602 | GCC_WARN_UNDECLARED_SELECTOR = YES; 603 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 604 | GCC_WARN_UNUSED_FUNCTION = YES; 605 | GCC_WARN_UNUSED_VARIABLE = YES; 606 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 607 | MTL_ENABLE_DEBUG_INFO = NO; 608 | MTL_FAST_MATH = YES; 609 | SDKROOT = iphoneos; 610 | SWIFT_COMPILATION_MODE = wholemodule; 611 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 612 | VALIDATE_PRODUCT = YES; 613 | }; 614 | name = Release; 615 | }; 616 | 0A7E1A55223F8286005946C3 /* Debug */ = { 617 | isa = XCBuildConfiguration; 618 | baseConfigurationReference = DBDD9EC748329082852B54E8 /* Pods-Demo-Server.debug.xcconfig */; 619 | buildSettings = { 620 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 621 | CODE_SIGN_STYLE = Automatic; 622 | DEVELOPMENT_TEAM = 827FJY26WQ; 623 | INFOPLIST_FILE = "Demo-Server/Info.plist"; 624 | LD_RUNPATH_SEARCH_PATHS = ( 625 | "$(inherited)", 626 | "@executable_path/Frameworks", 627 | ); 628 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.demo-server"; 629 | PRODUCT_NAME = "$(TARGET_NAME)"; 630 | SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/Demo-Server/Bridging.h"; 631 | SWIFT_VERSION = 4.2; 632 | TARGETED_DEVICE_FAMILY = "1,2"; 633 | }; 634 | name = Debug; 635 | }; 636 | 0A7E1A56223F8286005946C3 /* Release */ = { 637 | isa = XCBuildConfiguration; 638 | baseConfigurationReference = 1D67D5AE6D2642F011F715C7 /* Pods-Demo-Server.release.xcconfig */; 639 | buildSettings = { 640 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 641 | CODE_SIGN_STYLE = Automatic; 642 | DEVELOPMENT_TEAM = 827FJY26WQ; 643 | INFOPLIST_FILE = "Demo-Server/Info.plist"; 644 | LD_RUNPATH_SEARCH_PATHS = ( 645 | "$(inherited)", 646 | "@executable_path/Frameworks", 647 | ); 648 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.demo-server"; 649 | PRODUCT_NAME = "$(TARGET_NAME)"; 650 | SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/Demo-Server/Bridging.h"; 651 | SWIFT_VERSION = 4.2; 652 | TARGETED_DEVICE_FAMILY = "1,2"; 653 | }; 654 | name = Release; 655 | }; 656 | 0A7E1A58223F8286005946C3 /* Debug */ = { 657 | isa = XCBuildConfiguration; 658 | baseConfigurationReference = 803105D0C2B1D9D8EBB9A267 /* Pods-Demo-ServerTests.debug.xcconfig */; 659 | buildSettings = { 660 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 661 | BUNDLE_LOADER = "$(TEST_HOST)"; 662 | CODE_SIGN_STYLE = Automatic; 663 | DEVELOPMENT_TEAM = 8EBV324DZA; 664 | INFOPLIST_FILE = "Demo-ServerTests/Info.plist"; 665 | LD_RUNPATH_SEARCH_PATHS = ( 666 | "$(inherited)", 667 | "@executable_path/Frameworks", 668 | "@loader_path/Frameworks", 669 | ); 670 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.Demo-ServerTests"; 671 | PRODUCT_NAME = "$(TARGET_NAME)"; 672 | SWIFT_VERSION = 4.2; 673 | TARGETED_DEVICE_FAMILY = "1,2"; 674 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo-Server.app/Demo-Server"; 675 | }; 676 | name = Debug; 677 | }; 678 | 0A7E1A59223F8286005946C3 /* Release */ = { 679 | isa = XCBuildConfiguration; 680 | baseConfigurationReference = F3EC995A012BFD693338AC03 /* Pods-Demo-ServerTests.release.xcconfig */; 681 | buildSettings = { 682 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 683 | BUNDLE_LOADER = "$(TEST_HOST)"; 684 | CODE_SIGN_STYLE = Automatic; 685 | DEVELOPMENT_TEAM = 8EBV324DZA; 686 | INFOPLIST_FILE = "Demo-ServerTests/Info.plist"; 687 | LD_RUNPATH_SEARCH_PATHS = ( 688 | "$(inherited)", 689 | "@executable_path/Frameworks", 690 | "@loader_path/Frameworks", 691 | ); 692 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.Demo-ServerTests"; 693 | PRODUCT_NAME = "$(TARGET_NAME)"; 694 | SWIFT_VERSION = 4.2; 695 | TARGETED_DEVICE_FAMILY = "1,2"; 696 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Demo-Server.app/Demo-Server"; 697 | }; 698 | name = Release; 699 | }; 700 | 0A7E1A5B223F8286005946C3 /* Debug */ = { 701 | isa = XCBuildConfiguration; 702 | baseConfigurationReference = A4DB0025A0FCDE50AF142E7F /* Pods-Demo-ServerUITests.debug.xcconfig */; 703 | buildSettings = { 704 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 705 | CODE_SIGN_STYLE = Automatic; 706 | DEVELOPMENT_TEAM = 8EBV324DZA; 707 | INFOPLIST_FILE = "Demo-ServerUITests/Info.plist"; 708 | LD_RUNPATH_SEARCH_PATHS = ( 709 | "$(inherited)", 710 | "@executable_path/Frameworks", 711 | "@loader_path/Frameworks", 712 | ); 713 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.Demo-ServerUITests"; 714 | PRODUCT_NAME = "$(TARGET_NAME)"; 715 | SWIFT_VERSION = 4.2; 716 | TARGETED_DEVICE_FAMILY = "1,2"; 717 | TEST_TARGET_NAME = "Demo-Server"; 718 | }; 719 | name = Debug; 720 | }; 721 | 0A7E1A5C223F8286005946C3 /* Release */ = { 722 | isa = XCBuildConfiguration; 723 | baseConfigurationReference = AE47F1A9C5C7F94C953ABA3F /* Pods-Demo-ServerUITests.release.xcconfig */; 724 | buildSettings = { 725 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 726 | CODE_SIGN_STYLE = Automatic; 727 | DEVELOPMENT_TEAM = 8EBV324DZA; 728 | INFOPLIST_FILE = "Demo-ServerUITests/Info.plist"; 729 | LD_RUNPATH_SEARCH_PATHS = ( 730 | "$(inherited)", 731 | "@executable_path/Frameworks", 732 | "@loader_path/Frameworks", 733 | ); 734 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.Demo-ServerUITests"; 735 | PRODUCT_NAME = "$(TARGET_NAME)"; 736 | SWIFT_VERSION = 4.2; 737 | TARGETED_DEVICE_FAMILY = "1,2"; 738 | TEST_TARGET_NAME = "Demo-Server"; 739 | }; 740 | name = Release; 741 | }; 742 | /* End XCBuildConfiguration section */ 743 | 744 | /* Begin XCConfigurationList section */ 745 | 0A7E1A27223F8285005946C3 /* Build configuration list for PBXProject "Demo-Server" */ = { 746 | isa = XCConfigurationList; 747 | buildConfigurations = ( 748 | 0A7E1A52223F8286005946C3 /* Debug */, 749 | 0A7E1A53223F8286005946C3 /* Release */, 750 | ); 751 | defaultConfigurationIsVisible = 0; 752 | defaultConfigurationName = Release; 753 | }; 754 | 0A7E1A54223F8286005946C3 /* Build configuration list for PBXNativeTarget "Demo-Server" */ = { 755 | isa = XCConfigurationList; 756 | buildConfigurations = ( 757 | 0A7E1A55223F8286005946C3 /* Debug */, 758 | 0A7E1A56223F8286005946C3 /* Release */, 759 | ); 760 | defaultConfigurationIsVisible = 0; 761 | defaultConfigurationName = Release; 762 | }; 763 | 0A7E1A57223F8286005946C3 /* Build configuration list for PBXNativeTarget "Demo-ServerTests" */ = { 764 | isa = XCConfigurationList; 765 | buildConfigurations = ( 766 | 0A7E1A58223F8286005946C3 /* Debug */, 767 | 0A7E1A59223F8286005946C3 /* Release */, 768 | ); 769 | defaultConfigurationIsVisible = 0; 770 | defaultConfigurationName = Release; 771 | }; 772 | 0A7E1A5A223F8286005946C3 /* Build configuration list for PBXNativeTarget "Demo-ServerUITests" */ = { 773 | isa = XCConfigurationList; 774 | buildConfigurations = ( 775 | 0A7E1A5B223F8286005946C3 /* Debug */, 776 | 0A7E1A5C223F8286005946C3 /* Release */, 777 | ); 778 | defaultConfigurationIsVisible = 0; 779 | defaultConfigurationName = Release; 780 | }; 781 | /* End XCConfigurationList section */ 782 | }; 783 | rootObject = 0A7E1A24223F8285005946C3 /* Project object */; 784 | } 785 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server.xcodeproj/project.xcworkspace/xcuserdata/seer.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server.xcodeproj/project.xcworkspace/xcuserdata/seer.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Demo-Server/Demo-Server.xcodeproj/xcuserdata/seer.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Demo-Server.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 10 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/.DS_Store -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Demo-Server 4 | // 5 | // Created by 黄彦棋 on 2019/3/17. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AMapFoundationKit 11 | import MAMapKit 12 | 13 | @UIApplicationMain 14 | class AppDelegate: UIResponder, UIApplicationDelegate ,BMKLocationAuthDelegate{ 15 | 16 | var window: UIWindow? 17 | 18 | 19 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 20 | // Override point for customization after application launch. 21 | 22 | AMapServices.shared()?.enableHTTPS = true 23 | AMapServices.shared()?.apiKey = "250279dc586f1e32056c09d69b227a35" 24 | 25 | let bmk = BMKMapManager.init() 26 | let ret = bmk.start("Xczk6tmfeSj6Vz7suKA1oQns5s3MUVtC", generalDelegate: nil) 27 | if !ret { 28 | print("百度地图初始化错误") 29 | } 30 | 31 | BMKMapManager.setCoordinateTypeUsedInBaiduMapSDK(BMK_COORD_TYPE.COORDTYPE_BD09LL) 32 | 33 | BMKLocationAuth.sharedInstance()?.checkPermision(withKey: "Xczk6tmfeSj6Vz7suKA1oQns5s3MUVtC", authDelegate: self) 34 | 35 | return true 36 | } 37 | 38 | func onCheckPermissionState(_ iError: BMKLocationAuthErrorCode) { 39 | if iError.rawValue == 0 { 40 | print("百度地图定位鉴权成功. --- 百度SDK api架构真的很烂啊,有没有?") 41 | }else{ 42 | print("百度地图定位鉴权失败. --- 百度SDK api架构真的很烂啊,有没有?") 43 | } 44 | } 45 | 46 | func applicationWillResignActive(_ application: UIApplication) { 47 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 48 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 49 | } 50 | 51 | func applicationDidEnterBackground(_ application: UIApplication) { 52 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 53 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 54 | } 55 | 56 | func applicationWillEnterForeground(_ application: UIApplication) { 57 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 58 | } 59 | 60 | func applicationDidBecomeActive(_ application: UIApplication) { 61 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 62 | } 63 | 64 | func applicationWillTerminate(_ application: UIApplication) { 65 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 66 | } 67 | 68 | 69 | } 70 | 71 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/.DS_Store -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "database__easiPhoneNotification_20pt@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "database__easiPhoneNotification_20pt@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "database__easiPhoneSpootlight5_29pt@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "database__easiPhoneSpootlight5_29pt@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "database__easiPhoneSpootlight7_40pt@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "database__easiPhoneSpootlight7_40pt@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "database__easiPhoneApp_60pt@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "database__easiPhoneApp_60pt@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "database__easiPadNotifications_20pt.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "database__easiPadNotifications_20pt@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "database__easiPadSpootlight5_29pt.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "database__easiPadSpootlight5_29pt@2x.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "database__easiPadSpootlight7_40pt.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "database__easiPadSpootlight7_40pt@2x.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "database__easiPadApp_76pt.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "database__easiPadApp_76pt@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "database__easiPadProApp_83.5pt@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "database__easstore_1024pt.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | } 116 | } -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadApp_76pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadApp_76pt.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadApp_76pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadApp_76pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadNotifications_20pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadNotifications_20pt.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadNotifications_20pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadNotifications_20pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadProApp_83.5pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadProApp_83.5pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight5_29pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight5_29pt.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight5_29pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight5_29pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight7_40pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight7_40pt.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight7_40pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPadSpootlight7_40pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneApp_60pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneApp_60pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneApp_60pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneApp_60pt@3x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneNotification_20pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneNotification_20pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneNotification_20pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneNotification_20pt@3x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight5_29pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight5_29pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight5_29pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight5_29pt@3x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight7_40pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight7_40pt@2x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight7_40pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easiPhoneSpootlight7_40pt@3x.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easstore_1024pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/AppIcon.appiconset/database__easstore_1024pt.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/reduce.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "jian.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "jian-2.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/reduce.imageset/jian-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/reduce.imageset/jian-2.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/reduce.imageset/jian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/reduce.imageset/jian.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/start.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "kaishi-4.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "kaishi-5.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/start.imageset/kaishi-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/start.imageset/kaishi-4.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/start.imageset/kaishi-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/start.imageset/kaishi-5.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/stop.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "weibiaoti517-2.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "weibiaoti517.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/stop.imageset/weibiaoti517-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/stop.imageset/weibiaoti517-2.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/stop.imageset/weibiaoti517.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/stop.imageset/weibiaoti517.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/to_my_location.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "target-lock-6.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "target-lock-7.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/to_my_location.imageset/target-lock-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/to_my_location.imageset/target-lock-6.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Assets.xcassets/to_my_location.imageset/target-lock-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/Demo-Server/Demo-Server/Assets.xcassets/to_my_location.imageset/target-lock-7.png -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 39 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Bridging.h: -------------------------------------------------------------------------------- 1 | // 2 | // Bridging.h 3 | // Demo 4 | // 5 | // Created by 黄彦棋 on 2019/3/17. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | #ifndef Bridging_h 10 | #define Bridging_h 11 | 12 | #import 13 | #import 14 | #import "ECLocationTransform.h" 15 | #import //引入base相关所有的头文件 16 | #import //引入地图功能所有的头文件 17 | #import //引入检索功能所有的头文件 18 | #import //引入云检索功能所有的头文件 19 | #import //引入计算工具所有的头文件 20 | #import //只引入所需的单个头文件 21 | #import 22 | #import 23 | 24 | #endif /* Bridging_h */ 25 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | 模拟定位服务器 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSLocationAlwaysUsageDescription 26 | 始终允许访问位置信息 27 | NSLocationUsageDescription 28 | 永不允许访问位置信息 29 | NSLocationWhenInUseUsageDescription 30 | 使用应用期间允许访问位置信息 31 | UIBackgroundModes 32 | 33 | location 34 | 35 | UILaunchStoryboardName 36 | LaunchScreen 37 | UIMainStoryboardFile 38 | Main 39 | UIRequiredDeviceCapabilities 40 | 41 | armv7 42 | 43 | UISupportedInterfaceOrientations 44 | 45 | UIInterfaceOrientationPortrait 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | UISupportedInterfaceOrientations~ipad 50 | 51 | UIInterfaceOrientationPortrait 52 | UIInterfaceOrientationPortraitUpsideDown 53 | UIInterfaceOrientationLandscapeLeft 54 | UIInterfaceOrientationLandscapeRight 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Tools/ECLocationTransform.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface ECLocationTransform : NSObject 5 | 6 | @property (nonatomic, assign) double latitude; 7 | @property (nonatomic, assign) double longitude; 8 | 9 | - (ECLocationTransform*)initWithLatitude:(double)latitude andLongitude:(double)longitude; 10 | - (ECLocationTransform*)initWithCLLocationCoordinate:(CLLocationCoordinate2D)coordinate2D; 11 | 12 | /* 13 | 坐标系: 14 | WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块) 15 | GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用 16 | BD-09 :百度坐标偏移标准,Baidu Map使用 17 | */ 18 | 19 | #pragma mark - 从GPS坐标转化到高德坐标 20 | - (ECLocationTransform*)transformFromGPSToGD; 21 | 22 | #pragma mark - 从高德坐标转化到百度坐标 23 | - (ECLocationTransform*)transformFromGDToBD; 24 | 25 | #pragma mark - 从百度坐标到高德坐标 26 | - (ECLocationTransform*)transformFromBDToGD; 27 | 28 | #pragma mark - 从高德坐标到GPS坐标 29 | - (ECLocationTransform*)transformFromGDToGPS; 30 | 31 | #pragma mark - 从百度坐标到GPS坐标 32 | - (ECLocationTransform*)transformFromBDToGPS; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/Tools/ECLocationTransform.m: -------------------------------------------------------------------------------- 1 | #import "ECLocationTransform.h" 2 | #import 3 | 4 | static const double a = 6378245.0; 5 | static const double ee = 0.00669342162296594323; 6 | static const double pi = M_PI; 7 | static const double xPi = M_PI * 3000.0 / 180.0; 8 | 9 | @implementation ECLocationTransform 10 | 11 | - (id)initWithLatitude:(double)latitude andLongitude:(double)longitude { 12 | if (self = [super init]) { 13 | self.latitude = latitude; 14 | self.longitude = longitude; 15 | } 16 | return self; 17 | } 18 | 19 | - (id)initWithCLLocationCoordinate:(CLLocationCoordinate2D)coordinate2D{ 20 | return [[ECLocationTransform alloc] initWithLatitude:coordinate2D.latitude andLongitude:coordinate2D.longitude]; 21 | } 22 | 23 | - (id)transformFromGPSToGD { 24 | CLLocationCoordinate2D coor = [ECLocationTransform transformFromWGSToGCJ:CLLocationCoordinate2DMake(self.latitude, self.longitude)]; 25 | return [[ECLocationTransform alloc] initWithLatitude:coor.latitude andLongitude:coor.longitude]; 26 | } 27 | 28 | - (id)transformFromGDToBD { 29 | CLLocationCoordinate2D coor = [ECLocationTransform transformFromGCJToBaidu:CLLocationCoordinate2DMake(self.latitude, self.longitude)]; 30 | return [[ECLocationTransform alloc] initWithLatitude:coor.latitude andLongitude:coor.longitude]; 31 | } 32 | 33 | - (id)transformFromBDToGD { 34 | CLLocationCoordinate2D coor = [ECLocationTransform transformFromBaiduToGCJ:CLLocationCoordinate2DMake(self.latitude, self.longitude)]; 35 | return [[ECLocationTransform alloc] initWithLatitude:coor.latitude andLongitude:coor.longitude]; 36 | } 37 | 38 | - (ECLocationTransform*)transformFromGDToGPS { 39 | CLLocationCoordinate2D coor = [ECLocationTransform transformFromGCJToWGS:CLLocationCoordinate2DMake(self.latitude, self.longitude)]; 40 | return [[ECLocationTransform alloc] initWithLatitude:coor.latitude andLongitude:coor.longitude]; 41 | } 42 | 43 | - (id)transformFromBDToGPS { 44 | //先把百度转化为高德 45 | CLLocationCoordinate2D start_coor = [ECLocationTransform transformFromBaiduToGCJ:CLLocationCoordinate2DMake(self.latitude, self.longitude)]; 46 | CLLocationCoordinate2D end_coor = [ECLocationTransform transformFromGCJToWGS:CLLocationCoordinate2DMake(start_coor.latitude, start_coor.longitude)]; 47 | return [[ECLocationTransform alloc] initWithLatitude:end_coor.latitude andLongitude:end_coor.longitude]; 48 | } 49 | 50 | + (CLLocationCoordinate2D)transformFromWGSToGCJ:(CLLocationCoordinate2D)wgsLoc { 51 | CLLocationCoordinate2D adjustLoc; 52 | if([self isLocationOutOfChina:wgsLoc]) { 53 | adjustLoc = wgsLoc; 54 | } 55 | else { 56 | double adjustLat = [self transformLatWithX:wgsLoc.longitude - 105.0 withY:wgsLoc.latitude - 35.0]; 57 | double adjustLon = [self transformLonWithX:wgsLoc.longitude - 105.0 withY:wgsLoc.latitude - 35.0]; 58 | long double radLat = wgsLoc.latitude / 180.0 * pi; 59 | long double magic = sin(radLat); 60 | magic = 1 - ee * magic * magic; 61 | long double sqrtMagic = sqrt(magic); 62 | adjustLat = (adjustLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); 63 | adjustLon = (adjustLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi); 64 | adjustLoc.latitude = wgsLoc.latitude + adjustLat; 65 | adjustLoc.longitude = wgsLoc.longitude + adjustLon; 66 | } 67 | return adjustLoc; 68 | } 69 | 70 | + (double)transformLatWithX:(double)x withY:(double)y { 71 | double lat = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(fabs(x)); 72 | 73 | lat += (20.0 * sin(6.0 * x * pi) + 20.0 *sin(2.0 * x * pi)) * 2.0 / 3.0; 74 | lat += (20.0 * sin(y * pi) + 40.0 * sin(y / 3.0 * pi)) * 2.0 / 3.0; 75 | lat += (160.0 * sin(y / 12.0 * pi) + 320 * sin(y * pi / 30.0)) * 2.0 / 3.0; 76 | return lat; 77 | } 78 | 79 | + (double)transformLonWithX:(double)x withY:(double)y { 80 | double lon = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(fabs(x)); 81 | lon += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0; 82 | lon += (20.0 * sin(x * pi) + 40.0 * sin(x / 3.0 * pi)) * 2.0 / 3.0; 83 | lon += (150.0 * sin(x / 12.0 * pi) + 300.0 * sin(x / 30.0 * pi)) * 2.0 / 3.0; 84 | return lon; 85 | } 86 | 87 | + (CLLocationCoordinate2D)transformFromGCJToBaidu:(CLLocationCoordinate2D)p { 88 | long double z = sqrt(p.longitude * p.longitude + p.latitude * p.latitude) + 0.00002 * sqrt(p.latitude * pi); 89 | long double theta = atan2(p.latitude, p.longitude) + 0.000003 * cos(p.longitude * pi); 90 | CLLocationCoordinate2D geoPoint; 91 | geoPoint.latitude = (z * sin(theta) + 0.006); 92 | geoPoint.longitude = (z * cos(theta) + 0.0065); 93 | return geoPoint; 94 | } 95 | 96 | + (CLLocationCoordinate2D)transformFromBaiduToGCJ:(CLLocationCoordinate2D)p { 97 | double x = p.longitude - 0.0065, y = p.latitude - 0.006; 98 | double z = sqrt(x * x + y * y) - 0.00002 * sin(y * xPi); 99 | double theta = atan2(y, x) - 0.000003 * cos(x * xPi); 100 | CLLocationCoordinate2D geoPoint; 101 | geoPoint.latitude = z * sin(theta); 102 | geoPoint.longitude = z * cos(theta); 103 | return geoPoint; 104 | } 105 | 106 | + (CLLocationCoordinate2D)transformFromGCJToWGS:(CLLocationCoordinate2D)p { 107 | double threshold = 0.00001; 108 | 109 | // The boundary 110 | double minLat = p.latitude - 0.5; 111 | double maxLat = p.latitude + 0.5; 112 | double minLng = p.longitude - 0.5; 113 | double maxLng = p.longitude + 0.5; 114 | 115 | double delta = 1; 116 | int maxIteration = 30; 117 | // Binary search 118 | while(true) { 119 | CLLocationCoordinate2D leftBottom = [[self class] transformFromWGSToGCJ:(CLLocationCoordinate2D){.latitude = minLat,.longitude = minLng}]; 120 | CLLocationCoordinate2D rightBottom = [[self class] transformFromWGSToGCJ:(CLLocationCoordinate2D){.latitude = minLat,.longitude = maxLng}]; 121 | CLLocationCoordinate2D leftUp = [[self class] transformFromWGSToGCJ:(CLLocationCoordinate2D){.latitude = maxLat,.longitude = minLng}]; 122 | CLLocationCoordinate2D midPoint = [[self class] transformFromWGSToGCJ:(CLLocationCoordinate2D){.latitude = ((minLat + maxLat) / 2),.longitude = ((minLng + maxLng) / 2)}]; 123 | delta = fabs(midPoint.latitude - p.latitude) + fabs(midPoint.longitude - p.longitude); 124 | 125 | if(maxIteration-- <= 0 || delta <= threshold) { 126 | return (CLLocationCoordinate2D){.latitude = ((minLat + maxLat) / 2),.longitude = ((minLng + maxLng) / 2)}; 127 | } 128 | 129 | if(isContains(p, leftBottom, midPoint)) { 130 | maxLat = (minLat + maxLat) / 2; 131 | maxLng = (minLng + maxLng) / 2; 132 | } else if(isContains(p, rightBottom, midPoint)) { 133 | maxLat = (minLat + maxLat) / 2; 134 | minLng = (minLng + maxLng) / 2; 135 | } else if(isContains(p, leftUp, midPoint)) { 136 | minLat = (minLat + maxLat) / 2; 137 | maxLng = (minLng + maxLng) / 2; 138 | } else { 139 | minLat = (minLat + maxLat) / 2; 140 | minLng = (minLng + maxLng) / 2; 141 | } 142 | } 143 | 144 | } 145 | 146 | #pragma mark - 判断某个点point是否在p1和p2之间 147 | static bool isContains(CLLocationCoordinate2D point, CLLocationCoordinate2D p1, CLLocationCoordinate2D p2) { 148 | return (point.latitude >= MIN(p1.latitude, p2.latitude) && point.latitude <= MAX(p1.latitude, p2.latitude)) && (point.longitude >= MIN(p1.longitude,p2.longitude) && point.longitude <= MAX(p1.longitude, p2.longitude)); 149 | } 150 | 151 | #pragma mark - 判断是不是在中国 152 | + (BOOL)isLocationOutOfChina:(CLLocationCoordinate2D)location { 153 | if (location.longitude < 72.004 || location.longitude > 137.8347 || location.latitude < 0.8293 || location.latitude > 55.8271) 154 | return YES; 155 | return NO; 156 | } 157 | 158 | @end 159 | -------------------------------------------------------------------------------- /Demo-Server/Demo-Server/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Demo-Server 4 | // 5 | // Created by 黄彦棋 on 2019/3/17. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AMapFoundationKit 11 | import MAMapKit 12 | 13 | class ViewController: UIViewController { 14 | @IBOutlet weak var mapContainer: UIView! 15 | @IBOutlet weak var btnTurn: UIButton! 16 | var server:GCDWebServer! 17 | 18 | let userLocation:BMKUserLocation = BMKUserLocation.init() 19 | let locationManager:BMKLocationManager = BMKLocationManager.init() 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | 24 | server = GCDWebServer.init() 25 | server.addHandler(forMethod: "GET", path: "/locations", request: GCDWebServerRequest.self) {[unowned self] (request:GCDWebServerRequest) -> GCDWebServerResponse? in 26 | 27 | let idx = self.segmentIndex 28 | let coodiate:CLLocationCoordinate2D = self.routePoints[idx].last?.coordinate ?? CLLocationCoordinate2D.init(latitude: 0.0, longitude: 0.0) 29 | print("idx:\(self.segmentIndex)") 30 | let coodiateGps:ECLocationTransform = self.segmentIndex == 0 ? ECLocationTransform.init(latitude: coodiate.latitude, andLongitude: coodiate.longitude)!.fromGDToGPS() : ECLocationTransform.init(latitude: coodiate.latitude, andLongitude: coodiate.longitude)!.fromBDToGPS() 31 | print("Seer : GCDServer response lat\(coodiateGps.latitude) : lon:\(coodiateGps.longitude)") 32 | var date = Date.init() 33 | date.addTimeInterval(TimeInterval(TimeZone.current.secondsFromGMT(for: date))) 34 | let formatter = DateFormatter.init() 35 | formatter.dateFormat = "yyy-MM-dd HH:mm:ss" 36 | 37 | return GCDWebServerDataResponse.init(jsonObject: [ 38 | "isValid":coodiate.longitude != 0 || coodiate.latitude != 0, 39 | "lat":String.init(describing: coodiateGps.latitude), 40 | "lon":String.init(describing: coodiateGps.longitude), 41 | "index":self.routePoints[idx].count, 42 | "type":idx == 0 ? "高德地图":"百度地图", 43 | "coordinate-system":"gps", 44 | "date":formatter.string(from: date) 45 | ]) 46 | } 47 | server.start(withPort: 8080, bonjourName: nil) 48 | 49 | 50 | btnTurn.setBackgroundImage(UIImage.init(named: "start.png"), for: .normal) 51 | btnTurn.setBackgroundImage(UIImage.init(named: "stop.png"), for: .selected) 52 | 53 | bdMapView.delegate = self 54 | bdMapView.userTrackingMode = BMKUserTrackingModeFollow 55 | bdMapView.showsUserLocation = true 56 | bdMapView.zoomLevel = 16.4 57 | locationManager.delegate = self 58 | locationManager.pausesLocationUpdatesAutomatically = false 59 | locationManager.startUpdatingLocation() 60 | locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 61 | locationManager.coordinateType = BMKLocationCoordinateType.BMK09LL 62 | 63 | gdMapView.userTrackingMode = MAUserTrackingMode.follow 64 | gdMapView.delegate = self 65 | gdMapView.zoomLevel = 15 66 | 67 | mapContainer.addSubview(bdMapView) 68 | mapContainer.addSubview(gdMapView) 69 | } 70 | 71 | lazy var bdMapView:BMKMapView = { 72 | return BMKMapView.init(frame: mapContainer.bounds) 73 | }() 74 | 75 | lazy var gdMapView:MAMapView = { 76 | return MAMapView.init(frame: mapContainer.bounds) 77 | }() 78 | 79 | override func viewWillAppear(_ animated: Bool) { 80 | super.viewWillAppear(animated) 81 | // mapView.setUserTrackingMode(.follow, animated: false) 82 | if let _ = bdMapView.superview { 83 | bdMapView.viewWillAppear() 84 | } 85 | } 86 | 87 | override func viewWillDisappear(_ animated: Bool) { 88 | super.viewWillDisappear(animated) 89 | server.removeAllHandlers() 90 | server.stop() 91 | 92 | if let _ = bdMapView.superview{ 93 | bdMapView.viewWillDisappear() 94 | locationManager.stopUpdatingLocation() 95 | } 96 | } 97 | 98 | @IBAction func toGPSLocation(_ sender: Any) { 99 | if segmentIndex == 0 { 100 | gdMapView.setUserTrackingMode(.follow, animated: true) 101 | gdMapView.setZoomLevel(17, animated: true) 102 | }else{ 103 | bdMapView.zoomLevel = 18.4 104 | gdMapView.userTrackingMode = MAUserTrackingMode.follow 105 | } 106 | } 107 | 108 | var isSketching:[Bool] = [false,false] 109 | lazy var routePoints:[[AnyObject]] = { 110 | return [[],[]] 111 | }() 112 | lazy var routeLines:[[AnyObject]] = { 113 | return [[],[]] 114 | }() 115 | 116 | var segmentIndex:Int{ 117 | get{ 118 | return segment.selectedSegmentIndex 119 | } 120 | } 121 | 122 | @IBAction func switchSketchStatus(_ sender: UIButton) { 123 | if isSketching[segmentIndex] { 124 | if segmentIndex == 0{ 125 | gdMapView.removeAnnotations(routePoints[segmentIndex]) 126 | gdMapView.removeOverlays(routeLines[segmentIndex]) 127 | }else{ 128 | bdMapView.removeAnnotations(routePoints[segmentIndex]) 129 | bdMapView.removeOverlays(routeLines[segmentIndex]) 130 | } 131 | routePoints[segmentIndex].removeAll() 132 | routeLines[segmentIndex].removeAll() 133 | } 134 | isSketching[segmentIndex] = !isSketching[segmentIndex] 135 | sender.isSelected = isSketching[segmentIndex] 136 | } 137 | 138 | var lastIdx = 0 139 | 140 | @IBOutlet weak var segment: UISegmentedControl! 141 | @IBAction func switchService(_ sender: UISegmentedControl) { 142 | if segmentIndex == 1 { 143 | mapContainer.bringSubviewToFront(bdMapView) 144 | }else{ 145 | mapContainer.bringSubviewToFront(gdMapView) 146 | } 147 | lastIdx = segmentIndex 148 | btnTurn.isSelected = isSketching[segmentIndex] 149 | } 150 | 151 | @IBAction func reduceZoomLevel(_ sender: Any) { 152 | if segmentIndex == 0 { 153 | if gdMapView.zoomLevel - 0.5 > gdMapView.minZoomLevel{ 154 | gdMapView.setZoomLevel(gdMapView.zoomLevel - 0.5, animated: true) 155 | }else{ 156 | gdMapView.setZoomLevel(gdMapView.minZoomLevel, animated: true) 157 | } 158 | }else{ 159 | if bdMapView.zoomLevel - 0.5 > bdMapView.minZoomLevel{ 160 | bdMapView.zoomLevel = bdMapView.zoomLevel - 0.5 161 | }else{ 162 | bdMapView.zoomLevel = bdMapView.minZoomLevel 163 | } 164 | } 165 | } 166 | } 167 | 168 | extension ViewController:MAMapViewDelegate{ 169 | func mapView(_ mapView: MAMapView!, didSingleTappedAt coordinate: CLLocationCoordinate2D) { 170 | print("Sing Tap at AMap Lat:\(coordinate.latitude) Lon:\(coordinate.longitude)") 171 | let coor = ECLocationTransform.init(clLocationCoordinate: coordinate)?.fromGDToGPS() 172 | print("Sing Tap at GPS Lat:\(String(describing: coor?.latitude)) Lon:\(String(describing: coor?.longitude))") 173 | if isSketching[0]{ 174 | let point:MAPointAnnotation = MAPointAnnotation.init() 175 | point.coordinate = coordinate 176 | mapView.addAnnotation(point) 177 | routePoints[0].append(point) 178 | 179 | if routePoints[0].count > 1{ 180 | var coordinates:[CLLocationCoordinate2D] = [routePoints[0][routePoints[0].count - 2].coordinate,coordinate] 181 | let line:MAPolyline = MAPolyline(coordinates: &coordinates, count:2) 182 | routeLines[0].append(line) 183 | mapView.add(line) 184 | } 185 | } 186 | } 187 | 188 | func mapView(_ mapView: MAMapView!, rendererFor overlay: MAOverlay!) -> MAOverlayRenderer! { 189 | if overlay.isKind(of: MAPolyline.self) { 190 | let lineView = MAPolylineRenderer.init(overlay: overlay) 191 | lineView!.lineWidth = 8.0 192 | lineView!.strokeColor = UIColor(red:0.87, green:0.10, blue:0.13, alpha:0.95) 193 | lineView!.lineJoinType = kMALineJoinRound 194 | lineView!.lineCapType = kMALineCapRound 195 | 196 | return lineView 197 | } 198 | return nil 199 | } 200 | } 201 | 202 | extension ViewController:BMKMapViewDelegate{ 203 | 204 | func mapView(_ mapView: BMKMapView!, onClickedMapBlank coordinate: CLLocationCoordinate2D) { 205 | print("Sing Tap at BMKMap Lat:\(coordinate.latitude) Lon:\(coordinate.longitude)") 206 | 207 | let coor = ECLocationTransform.init(clLocationCoordinate: coordinate)?.fromBDToGPS() 208 | print("Sing Tap at GPS Lat:\(String(describing: coor?.latitude)) Lon:\(String(describing: coor?.longitude))") 209 | if isSketching[1]{ 210 | let point:BMKPointAnnotation = BMKPointAnnotation.init() 211 | point.coordinate = coordinate 212 | mapView.addAnnotation(point) 213 | routePoints[1].append(point) 214 | 215 | if routePoints[1].count > 1{ 216 | var coordinates:[CLLocationCoordinate2D] = [routePoints[1][routePoints[1].count - 2].coordinate,coordinate] 217 | let line:BMKPolyline = BMKPolyline(coordinates: &coordinates, count: 2) 218 | routeLines[1].append(line) 219 | mapView.add(line) 220 | } 221 | } 222 | } 223 | 224 | func mapView(_ mapView: BMKMapView!, viewFor overlay: BMKOverlay!) -> BMKOverlayView! { 225 | if overlay.isKind(of: BMKPolyline.self) { 226 | let lineView = BMKPolylineView.init(overlay: overlay) 227 | lineView!.lineWidth = 3.0 228 | lineView!.strokeColor = UIColor(red:0.87, green:0.10, blue:0.13, alpha:0.95) 229 | 230 | return lineView 231 | } 232 | 233 | return nil 234 | } 235 | } 236 | // 高德和百度代理方法命名冲突 (还真是水火不容) 237 | extension ViewController{ 238 | override func responds(to aSelector: Selector!) -> Bool { 239 | if aSelector == #selector(MAMapViewDelegate.mapView(_:viewFor:)) { 240 | 241 | } 242 | 243 | return super.responds(to: aSelector) 244 | } 245 | 246 | func gdMapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! { 247 | if annotation.isKind(of: MAPointAnnotation.self) && !annotation.coordinate.equalTo(coordinate: mapView.userLocation.coordinate){ 248 | let reuseId = "PointAnnotation" 249 | var view:MAAnnotationView? = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) 250 | if view == nil{ 251 | view = MAAnnotationView.init(annotation: annotation, reuseIdentifier: reuseId) 252 | view!.frame = .init(x: 0, y: 0, width: 20, height: 20) 253 | view!.layer.cornerRadius = 10 254 | view!.backgroundColor = UIColor(red:0.14, green:0.55, blue:0.91, alpha:1.00) 255 | } 256 | return view 257 | 258 | } 259 | 260 | return nil 261 | } 262 | 263 | func bdMapView(_ mapView: BMKMapView!, viewFor annotation: BMKAnnotation!) -> BMKAnnotationView! { 264 | if annotation.isKind(of: MAPointAnnotation.self) && !annotation.coordinate.equalTo(coordinate: userLocation.location.coordinate){ 265 | let reuseId = "PointAnnotation" 266 | var view:BMKPinAnnotationView? = (mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as! BMKPinAnnotationView) 267 | if view == nil{ 268 | view = BMKPinAnnotationView.init(annotation: annotation, reuseIdentifier: reuseId) 269 | view!.frame = .init(x: 0, y: 0, width: 20, height: 20) 270 | view!.layer.cornerRadius = 10 271 | view!.backgroundColor = UIColor(red:0.14, green:0.55, blue:0.91, alpha:1.00) 272 | } 273 | 274 | return view 275 | } 276 | 277 | return nil 278 | } 279 | } 280 | 281 | extension ViewController:BMKLocationManagerDelegate{ 282 | func bmkLocationManager(_ manager: BMKLocationManager, didUpdate heading: CLHeading?) { 283 | guard heading != nil else{ 284 | return 285 | } 286 | 287 | userLocation.heading = heading! 288 | bdMapView.updateLocationData(userLocation) 289 | } 290 | 291 | func bmkLocationManager(_ manager: BMKLocationManager, didUpdate location: BMKLocation?, orError error: Error?) { 292 | guard location != nil else{ 293 | return 294 | } 295 | 296 | userLocation.location = location!.location! 297 | bdMapView.updateLocationData(userLocation) 298 | } 299 | } 300 | 301 | extension CLLocationCoordinate2D{ 302 | func equalTo(coordinate:CLLocationCoordinate2D) -> Bool { 303 | return self.latitude == coordinate.latitude && self.longitude == coordinate.longitude 304 | } 305 | } 306 | 307 | -------------------------------------------------------------------------------- /Demo-Server/Demo-ServerTests/Demo_ServerTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Demo_ServerTests.swift 3 | // Demo-ServerTests 4 | // 5 | // Created by 黄彦棋 on 2019/3/18. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import Demo_Server 11 | 12 | class Demo_ServerTests: XCTestCase { 13 | 14 | override func setUp() { 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | } 21 | 22 | func testExample() { 23 | // This is an example of a functional test case. 24 | // Use XCTAssert and related functions to verify your tests produce the correct results. 25 | } 26 | 27 | func testPerformanceExample() { 28 | // This is an example of a performance test case. 29 | self.measure { 30 | // Put the code you want to measure the time of here. 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Demo-Server/Demo-ServerTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Demo-Server/Demo-ServerUITests/Demo_ServerUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Demo_ServerUITests.swift 3 | // Demo-ServerUITests 4 | // 5 | // Created by 黄彦棋 on 2019/3/18. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class Demo_ServerUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | // Put setup code here. This method is called before the invocation of each test method in the class. 15 | 16 | // In UI tests it is usually best to stop immediately when a failure occurs. 17 | continueAfterFailure = false 18 | 19 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 20 | XCUIApplication().launch() 21 | 22 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 23 | } 24 | 25 | override func tearDown() { 26 | // Put teardown code here. This method is called after the invocation of each test method in the class. 27 | } 28 | 29 | func testExample() { 30 | // Use recording to get started writing UI tests. 31 | // Use XCTAssert and related functions to verify your tests produce the correct results. 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Demo-Server/Demo-ServerUITests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Demo-Server/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Demo-Server' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | pod 'GCDWebServer' 9 | pod 'SRPinView' 10 | pod 'SRAirViews' 11 | pod 'AMap3DMap','6.7.0' 12 | pod 'BaiduMapKit','4.3.0' 13 | pod 'BMKLocationKit','1.4.0' 14 | 15 | target 'Demo-ServerTests' do 16 | inherit! :search_paths 17 | # Pods for testing 18 | end 19 | 20 | target 'Demo-ServerUITests' do 21 | inherit! :search_paths 22 | # Pods for testing 23 | end 24 | 25 | end 26 | -------------------------------------------------------------------------------- /Demo-Server/location.gpx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 版权所有(c)<年份><版权持有人> 2 | 3 | 反996许可证版本1.0 4 | 5 | 在符合下列条件的情况下,特此免费向任何得到本授权作品的副本(包括源代码、文件和/或相关内容,以 6 | 下统称为“授权作品”)的个人和法人实体授权:被授权个人或法人实体有权以任何目的处置授权作品,包括 7 | 但不限于使用、复制,修改,衍生利用、散布,发布和再许可: 8 | 9 | 1. 个人或法人实体必须在许可作品的每个再散布或衍生副本上包含以上版权声明和本许可证,不得自行修 10 | 改。 11 | 2. 个人或法人实体必须严格遵守与个人实际所在地或个人出生地或归化地、或法人实体注册地或经营地( 12 | 以较严格者为准)的司法管辖区所有适用的与劳动和就业相关法律、法规、规则和标准。如果该司法管辖区 13 | 没有此类法律、法规、规章和标准或其法律、法规、规章和标准不可执行,则个人或法人实体必须遵守国际 14 | 劳工标准的核心公约。 15 | 3. 个人或法人不得以任何方式诱导、暗示或强迫其全职或兼职员工或其独立承包人以口头或书面形式同意 16 | 直接或间接限制、削弱或放弃其所拥有的,受相关与劳动和就业有关的法律、法规、规则和标准保护的权利 17 | 或补救措施,无论该等书面或口头协议是否被该司法管辖区的法律所承认,该等个人或法人实体也不得以任 18 | 何方法限制其雇员或独立承包人向版权持有人或监督许可证合规情况的有关当局报告或投诉上述违反许可证 19 | 的行为的权利。 20 | 21 | 该授权作品是"按原样"提供,不做任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵 22 | 权性的保证。在任何情况下,无论是在合同诉讼、侵权诉讼或其他诉讼中,版权持有人均不承担因本软件或 23 | 本软件的使用或其他交易而产生、引起或与之相关的任何索赔、损害或其他责任。 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 996.icu 2 | [![LICENSE](https://img.shields.io/badge/license-Anti%20996-blue.svg)](https://github.com/996icu/996.ICU/blob/master/LICENSE) 3 | 4 | # iOSDynamicLocation 5 | iOS中高德地图、百度地图在模拟器上,通过GPX文件,利用脚本动态修改目标模拟器位置的示例。 6 | 7 | ![运行效果](https://github.com/HuangYanQi/assets_repository/blob/master/images/运行效果小gif.gif) 8 | 9 | # 使用方式 10 | ### 准备 11 | 下载整个项目 12 | 13 | ``` 14 | cd iOSDynamicLocation/Demo-Server 15 | ``` 16 | ``` 17 | pod install 18 | ``` 19 | ``` 20 | cd ../target_project 21 | ``` 22 | ``` 23 | pod install 24 | ``` 25 | 到[百度地图开放平台](http://lbsyun.baidu.com)申请***App AK*** 26 | 到[高德地图开放平台](https://lbs.amap.com)申请***App Key***。(上述AK,Key以下简称***Key***) 27 | 28 | 对于**Demo-Server**,上述两平台的Key必须重新申请,并设置**Demo-Server**的**bundleId** 29 | 30 | 对于**target_project**,该项目用于示例,可以换为你自己需要修改定位的***任意app工程***,也可以将bundle id修改为已有工程的bundle id,并在AppDelegate中设置好对应的key。 31 | 32 | 如果使用你需要动态模拟定位的目标工程,需要在工程中添加好用于修改定位的gpx文件,如**target_project中的location.gpx**,并修改**dynamicLocation.py**中的***GPXPaths*** 33 | ``` 34 | GPXPaths = ["上述GPX文件路径"] 35 | ``` 36 | 37 | ### 运行 38 | 1、打开Demo-Server编译运行在模拟器1,以下简称***模拟器Server*** 39 | 40 | 2、打开你需要修改定位的模拟器工程运行在模拟器2,以下简称***模拟器Client*** 41 | 42 | 3、打开终端cd到**dynamicLocation.py**所在目录,并运行 43 | 44 | ![准备配置](https://github.com/HuangYanQi/assets_repository/blob/master/images/准备运行.png) 45 | ### 脚本步骤说明 46 | #### **注:** 第一次运行需要通过以下3个步骤配置鼠标指针位置,之后,如果目标工程的XCode窗口没有变化,就不需要手动配置,信息会保存在脚本文件所在目录的config.pkl中 47 | 1、第一步将鼠标移动至XCode目标工程的空白可以点击的地方(不要点击,如窗口边框上),按回车 48 | 49 | 2、第二步将鼠标移动选择GPX文件的按钮处(不要点击),按回车 50 | 51 | ![第二步](https://github.com/HuangYanQi/assets_repository/blob/master/images/2.png) 52 | 53 | 3、第三步先点击选择GPX文件的按钮,弹出菜单,将鼠标移至gpx文件的位置,按ESC,利用控制台的***文字信息***标记鼠标位置,点击终端让终端获得焦点(也可以通过快捷键让终端获得焦点),然后按下enter 54 | 55 | ![第三步1](https://github.com/HuangYanQi/assets_repository/blob/master/images/3-1.png) 56 | 57 | ![第三步2](https://github.com/HuangYanQi/assets_repository/blob/master/images/3-2.png) 58 | 59 | 4、随后就能通过在***模拟器server***点击地图上的位置,动态修改***模拟器Client***的位置 60 | 61 | 5、在***模拟器server***上面选择坐标点后,手指一定要快速离开触控板,或者不要移动鼠标。否则会影响脚本操作鼠标(也可以再python脚本文件中延长操作鼠标的时间间隔) 62 | 63 | ## 最后 64 | 本项目能够帮助你在地图相关iOSapp开发中提高调试效率,希望你能支持[996.icu](https://996.icu/#/en_US),也希望更多的同行,在编程的路上能拥有更多属于自己的时间陪陪家人 65 | 66 | 67 | -------------------------------------------------------------------------------- /dynamicLocation.py: -------------------------------------------------------------------------------- 1 | import threading, json, time, os.path 2 | import pickle 3 | from urllib import request 4 | from pymouse import * 5 | 6 | LoopInterval = 1 7 | ClickInterval = 0.2 8 | # 不用设置 9 | baseUrl = "http://localhost:8080/locations" 10 | 11 | # 不用管,目标工程APP的名字,不用设置 12 | XCodeNames = ["Target App"] 13 | 14 | # 用数组,是因为一开始想配置多个目标app,然后实现同时修改多个模拟器的定位,最终发现XCode只能支持修改【最后一次启动】的模拟器位置 15 | ServerUrls = [baseUrl] 16 | 17 | # 修改为target_project项目文件夹中location.gpx文件的位置(文件需要拖入过XCode中) 18 | GPXPaths = ["/iOS模拟器定位动态模拟/target_project/location.gpx"] 19 | MOUSE = PyMouse() 20 | 21 | 22 | class Location(): 23 | # def __init__(self, type, index, lat, lon): 24 | # self.type = type 25 | # self.index = index 26 | # self.lat = lat 27 | # self.lon = lon 28 | 29 | def __init__(self, jsonObj): 30 | # Location.__init__(self, jsonObj["type"], jsonObj["index"], jsonObj["lat"], jsonObj["lon"]) 31 | self.type = jsonObj["type"] 32 | self.index = jsonObj["index"] 33 | self.lat = jsonObj["lat"] 34 | self.lon = jsonObj["lon"] 35 | self.isValid = jsonObj["isValid"] 36 | 37 | def __str__(self): 38 | return "LocationType: %s, Idx:%d, lat:%s, lon:%s" % (self.type, self.index, self.lat, self.lon) 39 | 40 | class XCodeWindowConfig(): 41 | def __init__(self, name, url, gpxPath, focus=None, locBtn=None, chooseGpx=None): 42 | self.name = name 43 | self.url = url 44 | self.gpxPath = gpxPath 45 | self.focus = focus 46 | self.locBtn = locBtn 47 | self.chooseGpx = chooseGpx 48 | 49 | class AsyncThread(threading.Thread): 50 | 51 | def __init__(self, configs): 52 | threading.Thread.__init__(self) 53 | self.configs = configs 54 | 55 | def run(self): 56 | LAST_Response = [-1] * len(XCodeNames) 57 | GPX1 = '\n\n\t\n' 60 | while True: 61 | print("\n==================================================================") 62 | for idx, config in enumerate(self.configs): 63 | 64 | response = request.urlopen(config.url) 65 | jsonLoc = json.loads(response.read()) 66 | location = Location(jsonLoc) 67 | if not location.isValid: 68 | print("\nunValid location") 69 | continue 70 | 71 | print(location) 72 | 73 | if LAST_Response[idx] != location.index: 74 | print("\n" + config.name + "获得新定位") 75 | file = config.gpxPath 76 | if not os.path.exists(file): 77 | print("Error: GPX文件不存在, Path:" + file) 78 | exit(0) 79 | 80 | with open(file, 'w', encoding='utf-8') as gpx: 81 | gpx.write(GPX1 + location.lat + GPX2 + location.lon + GPX3) 82 | print("新定位写入成功. -> 将操作XCode.") 83 | 84 | User_Mouse = MOUSE.position() 85 | # 获得focus 86 | MOUSE.click(config.focus[0], config.focus[1]) 87 | # GPX 按钮 88 | MOUSE.click(config.locBtn[0], config.locBtn[1]) 89 | time.sleep(ClickInterval) 90 | # 选中 GPX 91 | MOUSE.move(config.chooseGpx[0], config.chooseGpx[1]) 92 | time.sleep(ClickInterval) 93 | MOUSE.click(config.chooseGpx[0], config.chooseGpx[1]) 94 | LAST_Response[idx] = location.index 95 | MOUSE.move(User_Mouse[0], User_Mouse[1]) 96 | time.sleep(LoopInterval) 97 | 98 | def startThread(configs): 99 | thread = AsyncThread(configs) 100 | thread.start() 101 | 102 | def getConfig(): 103 | mouse = PyMouse() 104 | configs = [] 105 | print("###该脚本需要手动调整好各窗口位置才能正确修改模拟器定位###") 106 | for idx, name in enumerate(XCodeNames): 107 | input("1、将鼠标移动至 -> [工程" + name + "]" + "窗口 -> [空白可点击获得Focus的地方] -> [Enter]确认") 108 | config = XCodeWindowConfig(name, ServerUrls[idx], GPXPaths[idx]) 109 | config.focus = mouse.position() 110 | input("2、将鼠标移动至 -> [工程" + name + "]" + "窗口 -> [修改GPX文件的按钮处] -> [Enter]确认") 111 | config.locBtn = mouse.position() 112 | input("3、将鼠标移动至 -> [工程" + name + "]" + "窗口 -> [选中GPX文件的按钮处] -> [Enter]确认") 113 | config.chooseGpx = mouse.position() 114 | configs.append(config) 115 | fn = 'config.pkl' 116 | with open(fn, 'wb') as f: 117 | pickle.dump(configs, f) 118 | 119 | return configs 120 | 121 | def main(): 122 | # if len(sys.argv) > 1: 123 | # arg = sys.argv[1] 124 | # if arg != "--no-guide": 125 | fn = 'config.pkl' 126 | if os.path.exists(fn): 127 | if len(sys.argv) > 1 and sys.argv[1] == "--clear-cache": 128 | os.remove(fn) 129 | print("已删除缓存的配置文件:config.pkl") 130 | return 131 | with open(fn, 'rb') as f: 132 | configs = pickle.load(f) 133 | if len(configs) > 0 and input("是否选择上一次配置的指针坐标操作:1-是 0-否(需确保窗口没有发生变化)") == "1": 134 | startThread(configs) 135 | else: 136 | startThread(getConfig()) 137 | else: 138 | if len(sys.argv) > 1 and sys.argv[1] == "--clear-cache": 139 | print("没有缓存的配置文件:config.pkl") 140 | exit(0) 141 | startThread(getConfig()) 142 | 143 | if __name__ == '__main__': 144 | main() 145 | -------------------------------------------------------------------------------- /target_project/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/.DS_Store -------------------------------------------------------------------------------- /target_project/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'target_project' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | pod 'SRPinView' 9 | pod 'SRAirViews' 10 | pod 'AMap3DMap','6.7.0' 11 | pod 'BaiduMapKit','4.3.0' 12 | pod 'BMKLocationKit','1.4.0' 13 | 14 | target 'target_projectTests' do 15 | inherit! :search_paths 16 | # Pods for testing 17 | end 18 | 19 | target 'target_projectUITests' do 20 | inherit! :search_paths 21 | # Pods for testing 22 | end 23 | 24 | end 25 | -------------------------------------------------------------------------------- /target_project/location.gpx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /target_project/target_project.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0A65FD7D226879C100D7CF44 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A65FD7C226879C100D7CF44 /* AppDelegate.swift */; }; 11 | 0A65FD7F226879C100D7CF44 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A65FD7E226879C100D7CF44 /* ViewController.swift */; }; 12 | 0A65FD82226879C100D7CF44 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0A65FD80226879C100D7CF44 /* Main.storyboard */; }; 13 | 0A65FD84226879C100D7CF44 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0A65FD83226879C100D7CF44 /* Assets.xcassets */; }; 14 | 0A65FD87226879C100D7CF44 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0A65FD85226879C100D7CF44 /* LaunchScreen.storyboard */; }; 15 | 0A65FD92226879C200D7CF44 /* target_projectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A65FD91226879C200D7CF44 /* target_projectTests.swift */; }; 16 | 0A65FD9D226879C200D7CF44 /* target_projectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A65FD9C226879C200D7CF44 /* target_projectUITests.swift */; }; 17 | 6BE385CB00161DAF888C3A6C /* Pods_target_project.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FCACC941128968D3294F481 /* Pods_target_project.framework */; }; 18 | B6B36E5518191ECE7B81AFFB /* Pods_target_projectTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A11DD32499DE2377A23C535 /* Pods_target_projectTests.framework */; }; 19 | D35FBFED7355A1EA2085350A /* Pods_target_projectUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 025C73CDDA2AE551FF4FDE0D /* Pods_target_projectUITests.framework */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXContainerItemProxy section */ 23 | 0A65FD8E226879C200D7CF44 /* PBXContainerItemProxy */ = { 24 | isa = PBXContainerItemProxy; 25 | containerPortal = 0A65FD71226879C100D7CF44 /* Project object */; 26 | proxyType = 1; 27 | remoteGlobalIDString = 0A65FD78226879C100D7CF44; 28 | remoteInfo = target_project; 29 | }; 30 | 0A65FD99226879C200D7CF44 /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 0A65FD71226879C100D7CF44 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 0A65FD78226879C100D7CF44; 35 | remoteInfo = target_project; 36 | }; 37 | /* End PBXContainerItemProxy section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 025C73CDDA2AE551FF4FDE0D /* Pods_target_projectUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_target_projectUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 0A65FD79226879C100D7CF44 /* target_project.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = target_project.app; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 0A65FD7C226879C100D7CF44 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 43 | 0A65FD7E226879C100D7CF44 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 44 | 0A65FD81226879C100D7CF44 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 45 | 0A65FD83226879C100D7CF44 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 46 | 0A65FD86226879C100D7CF44 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 47 | 0A65FD88226879C100D7CF44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 48 | 0A65FD8D226879C200D7CF44 /* target_projectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = target_projectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 49 | 0A65FD91226879C200D7CF44 /* target_projectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = target_projectTests.swift; sourceTree = ""; }; 50 | 0A65FD93226879C200D7CF44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 51 | 0A65FD98226879C200D7CF44 /* target_projectUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = target_projectUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | 0A65FD9C226879C200D7CF44 /* target_projectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = target_projectUITests.swift; sourceTree = ""; }; 53 | 0A65FD9E226879C200D7CF44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 54 | 0A65FDAA22687ACF00D7CF44 /* Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = ""; }; 55 | 0FCACC941128968D3294F481 /* Pods_target_project.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_target_project.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 56 | 18BBDA2AD67561BC26D2BEA1 /* Pods-target_projectTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-target_projectTests.release.xcconfig"; path = "Target Support Files/Pods-target_projectTests/Pods-target_projectTests.release.xcconfig"; sourceTree = ""; }; 57 | 19EA8135E4286684A8A6E808 /* Pods-target_project.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-target_project.release.xcconfig"; path = "Target Support Files/Pods-target_project/Pods-target_project.release.xcconfig"; sourceTree = ""; }; 58 | 1A11DD32499DE2377A23C535 /* Pods_target_projectTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_target_projectTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 59 | 668A0FCB2AD9B0FA82BA0628 /* Pods-target_projectUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-target_projectUITests.release.xcconfig"; path = "Target Support Files/Pods-target_projectUITests/Pods-target_projectUITests.release.xcconfig"; sourceTree = ""; }; 60 | 7D0A9AE1A7644FF85D4B8C6F /* Pods-target_project.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-target_project.debug.xcconfig"; path = "Target Support Files/Pods-target_project/Pods-target_project.debug.xcconfig"; sourceTree = ""; }; 61 | CDAD3917E12006DC9A1C2AE8 /* Pods-target_projectUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-target_projectUITests.debug.xcconfig"; path = "Target Support Files/Pods-target_projectUITests/Pods-target_projectUITests.debug.xcconfig"; sourceTree = ""; }; 62 | FD3FF2DB293A2D9C0C7055C1 /* Pods-target_projectTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-target_projectTests.debug.xcconfig"; path = "Target Support Files/Pods-target_projectTests/Pods-target_projectTests.debug.xcconfig"; sourceTree = ""; }; 63 | /* End PBXFileReference section */ 64 | 65 | /* Begin PBXFrameworksBuildPhase section */ 66 | 0A65FD76226879C100D7CF44 /* Frameworks */ = { 67 | isa = PBXFrameworksBuildPhase; 68 | buildActionMask = 2147483647; 69 | files = ( 70 | 6BE385CB00161DAF888C3A6C /* Pods_target_project.framework in Frameworks */, 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | 0A65FD8A226879C200D7CF44 /* Frameworks */ = { 75 | isa = PBXFrameworksBuildPhase; 76 | buildActionMask = 2147483647; 77 | files = ( 78 | B6B36E5518191ECE7B81AFFB /* Pods_target_projectTests.framework in Frameworks */, 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | 0A65FD95226879C200D7CF44 /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | D35FBFED7355A1EA2085350A /* Pods_target_projectUITests.framework in Frameworks */, 87 | ); 88 | runOnlyForDeploymentPostprocessing = 0; 89 | }; 90 | /* End PBXFrameworksBuildPhase section */ 91 | 92 | /* Begin PBXGroup section */ 93 | 0A65FD70226879C100D7CF44 = { 94 | isa = PBXGroup; 95 | children = ( 96 | 0A65FD7B226879C100D7CF44 /* target_project */, 97 | 0A65FD90226879C200D7CF44 /* target_projectTests */, 98 | 0A65FD9B226879C200D7CF44 /* target_projectUITests */, 99 | 0A65FD7A226879C100D7CF44 /* Products */, 100 | B83F28233A37DCA4BC00C3D2 /* Pods */, 101 | 14C7FE4DA9A71BAB333EA110 /* Frameworks */, 102 | ); 103 | sourceTree = ""; 104 | }; 105 | 0A65FD7A226879C100D7CF44 /* Products */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 0A65FD79226879C100D7CF44 /* target_project.app */, 109 | 0A65FD8D226879C200D7CF44 /* target_projectTests.xctest */, 110 | 0A65FD98226879C200D7CF44 /* target_projectUITests.xctest */, 111 | ); 112 | name = Products; 113 | sourceTree = ""; 114 | }; 115 | 0A65FD7B226879C100D7CF44 /* target_project */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 0A65FD7C226879C100D7CF44 /* AppDelegate.swift */, 119 | 0A65FD7E226879C100D7CF44 /* ViewController.swift */, 120 | 0A65FD80226879C100D7CF44 /* Main.storyboard */, 121 | 0A65FD83226879C100D7CF44 /* Assets.xcassets */, 122 | 0A65FD85226879C100D7CF44 /* LaunchScreen.storyboard */, 123 | 0A65FD88226879C100D7CF44 /* Info.plist */, 124 | 0A65FDAA22687ACF00D7CF44 /* Bridging-Header.h */, 125 | ); 126 | path = target_project; 127 | sourceTree = ""; 128 | }; 129 | 0A65FD90226879C200D7CF44 /* target_projectTests */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | 0A65FD91226879C200D7CF44 /* target_projectTests.swift */, 133 | 0A65FD93226879C200D7CF44 /* Info.plist */, 134 | ); 135 | path = target_projectTests; 136 | sourceTree = ""; 137 | }; 138 | 0A65FD9B226879C200D7CF44 /* target_projectUITests */ = { 139 | isa = PBXGroup; 140 | children = ( 141 | 0A65FD9C226879C200D7CF44 /* target_projectUITests.swift */, 142 | 0A65FD9E226879C200D7CF44 /* Info.plist */, 143 | ); 144 | path = target_projectUITests; 145 | sourceTree = ""; 146 | }; 147 | 14C7FE4DA9A71BAB333EA110 /* Frameworks */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 0FCACC941128968D3294F481 /* Pods_target_project.framework */, 151 | 1A11DD32499DE2377A23C535 /* Pods_target_projectTests.framework */, 152 | 025C73CDDA2AE551FF4FDE0D /* Pods_target_projectUITests.framework */, 153 | ); 154 | name = Frameworks; 155 | sourceTree = ""; 156 | }; 157 | B83F28233A37DCA4BC00C3D2 /* Pods */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 7D0A9AE1A7644FF85D4B8C6F /* Pods-target_project.debug.xcconfig */, 161 | 19EA8135E4286684A8A6E808 /* Pods-target_project.release.xcconfig */, 162 | FD3FF2DB293A2D9C0C7055C1 /* Pods-target_projectTests.debug.xcconfig */, 163 | 18BBDA2AD67561BC26D2BEA1 /* Pods-target_projectTests.release.xcconfig */, 164 | CDAD3917E12006DC9A1C2AE8 /* Pods-target_projectUITests.debug.xcconfig */, 165 | 668A0FCB2AD9B0FA82BA0628 /* Pods-target_projectUITests.release.xcconfig */, 166 | ); 167 | path = Pods; 168 | sourceTree = ""; 169 | }; 170 | /* End PBXGroup section */ 171 | 172 | /* Begin PBXNativeTarget section */ 173 | 0A65FD78226879C100D7CF44 /* target_project */ = { 174 | isa = PBXNativeTarget; 175 | buildConfigurationList = 0A65FDA1226879C200D7CF44 /* Build configuration list for PBXNativeTarget "target_project" */; 176 | buildPhases = ( 177 | 7088AA806B4F76E66E402301 /* [CP] Check Pods Manifest.lock */, 178 | 0A65FD75226879C100D7CF44 /* Sources */, 179 | 0A65FD76226879C100D7CF44 /* Frameworks */, 180 | 0A65FD77226879C100D7CF44 /* Resources */, 181 | F0F2BF72C87DFBAE32B36507 /* [CP] Embed Pods Frameworks */, 182 | 34B7E0080F7ADD1EFBAC8286 /* [CP] Copy Pods Resources */, 183 | ); 184 | buildRules = ( 185 | ); 186 | dependencies = ( 187 | ); 188 | name = target_project; 189 | productName = target_project; 190 | productReference = 0A65FD79226879C100D7CF44 /* target_project.app */; 191 | productType = "com.apple.product-type.application"; 192 | }; 193 | 0A65FD8C226879C200D7CF44 /* target_projectTests */ = { 194 | isa = PBXNativeTarget; 195 | buildConfigurationList = 0A65FDA4226879C200D7CF44 /* Build configuration list for PBXNativeTarget "target_projectTests" */; 196 | buildPhases = ( 197 | B6E7DFF17F208A5A96B4173A /* [CP] Check Pods Manifest.lock */, 198 | 0A65FD89226879C200D7CF44 /* Sources */, 199 | 0A65FD8A226879C200D7CF44 /* Frameworks */, 200 | 0A65FD8B226879C200D7CF44 /* Resources */, 201 | ); 202 | buildRules = ( 203 | ); 204 | dependencies = ( 205 | 0A65FD8F226879C200D7CF44 /* PBXTargetDependency */, 206 | ); 207 | name = target_projectTests; 208 | productName = target_projectTests; 209 | productReference = 0A65FD8D226879C200D7CF44 /* target_projectTests.xctest */; 210 | productType = "com.apple.product-type.bundle.unit-test"; 211 | }; 212 | 0A65FD97226879C200D7CF44 /* target_projectUITests */ = { 213 | isa = PBXNativeTarget; 214 | buildConfigurationList = 0A65FDA7226879C200D7CF44 /* Build configuration list for PBXNativeTarget "target_projectUITests" */; 215 | buildPhases = ( 216 | EFFFDCDD25DCF2D664994350 /* [CP] Check Pods Manifest.lock */, 217 | 0A65FD94226879C200D7CF44 /* Sources */, 218 | 0A65FD95226879C200D7CF44 /* Frameworks */, 219 | 0A65FD96226879C200D7CF44 /* Resources */, 220 | ); 221 | buildRules = ( 222 | ); 223 | dependencies = ( 224 | 0A65FD9A226879C200D7CF44 /* PBXTargetDependency */, 225 | ); 226 | name = target_projectUITests; 227 | productName = target_projectUITests; 228 | productReference = 0A65FD98226879C200D7CF44 /* target_projectUITests.xctest */; 229 | productType = "com.apple.product-type.bundle.ui-testing"; 230 | }; 231 | /* End PBXNativeTarget section */ 232 | 233 | /* Begin PBXProject section */ 234 | 0A65FD71226879C100D7CF44 /* Project object */ = { 235 | isa = PBXProject; 236 | attributes = { 237 | LastSwiftUpdateCheck = 1020; 238 | LastUpgradeCheck = 1020; 239 | ORGANIZATIONNAME = seer; 240 | TargetAttributes = { 241 | 0A65FD78226879C100D7CF44 = { 242 | CreatedOnToolsVersion = 10.2.1; 243 | }; 244 | 0A65FD8C226879C200D7CF44 = { 245 | CreatedOnToolsVersion = 10.2.1; 246 | TestTargetID = 0A65FD78226879C100D7CF44; 247 | }; 248 | 0A65FD97226879C200D7CF44 = { 249 | CreatedOnToolsVersion = 10.2.1; 250 | TestTargetID = 0A65FD78226879C100D7CF44; 251 | }; 252 | }; 253 | }; 254 | buildConfigurationList = 0A65FD74226879C100D7CF44 /* Build configuration list for PBXProject "target_project" */; 255 | compatibilityVersion = "Xcode 9.3"; 256 | developmentRegion = en; 257 | hasScannedForEncodings = 0; 258 | knownRegions = ( 259 | en, 260 | Base, 261 | ); 262 | mainGroup = 0A65FD70226879C100D7CF44; 263 | productRefGroup = 0A65FD7A226879C100D7CF44 /* Products */; 264 | projectDirPath = ""; 265 | projectRoot = ""; 266 | targets = ( 267 | 0A65FD78226879C100D7CF44 /* target_project */, 268 | 0A65FD8C226879C200D7CF44 /* target_projectTests */, 269 | 0A65FD97226879C200D7CF44 /* target_projectUITests */, 270 | ); 271 | }; 272 | /* End PBXProject section */ 273 | 274 | /* Begin PBXResourcesBuildPhase section */ 275 | 0A65FD77226879C100D7CF44 /* Resources */ = { 276 | isa = PBXResourcesBuildPhase; 277 | buildActionMask = 2147483647; 278 | files = ( 279 | 0A65FD87226879C100D7CF44 /* LaunchScreen.storyboard in Resources */, 280 | 0A65FD84226879C100D7CF44 /* Assets.xcassets in Resources */, 281 | 0A65FD82226879C100D7CF44 /* Main.storyboard in Resources */, 282 | ); 283 | runOnlyForDeploymentPostprocessing = 0; 284 | }; 285 | 0A65FD8B226879C200D7CF44 /* Resources */ = { 286 | isa = PBXResourcesBuildPhase; 287 | buildActionMask = 2147483647; 288 | files = ( 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | }; 292 | 0A65FD96226879C200D7CF44 /* Resources */ = { 293 | isa = PBXResourcesBuildPhase; 294 | buildActionMask = 2147483647; 295 | files = ( 296 | ); 297 | runOnlyForDeploymentPostprocessing = 0; 298 | }; 299 | /* End PBXResourcesBuildPhase section */ 300 | 301 | /* Begin PBXShellScriptBuildPhase section */ 302 | 34B7E0080F7ADD1EFBAC8286 /* [CP] Copy Pods Resources */ = { 303 | isa = PBXShellScriptBuildPhase; 304 | buildActionMask = 2147483647; 305 | files = ( 306 | ); 307 | inputFileListPaths = ( 308 | ); 309 | inputPaths = ( 310 | "${PODS_ROOT}/Target Support Files/Pods-target_project/Pods-target_project-resources.sh", 311 | "${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle", 312 | "${PODS_ROOT}/BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/mapapi.bundle", 313 | ); 314 | name = "[CP] Copy Pods Resources"; 315 | outputFileListPaths = ( 316 | ); 317 | outputPaths = ( 318 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle", 319 | "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mapapi.bundle", 320 | ); 321 | runOnlyForDeploymentPostprocessing = 0; 322 | shellPath = /bin/sh; 323 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-target_project/Pods-target_project-resources.sh\"\n"; 324 | showEnvVarsInLog = 0; 325 | }; 326 | 7088AA806B4F76E66E402301 /* [CP] Check Pods Manifest.lock */ = { 327 | isa = PBXShellScriptBuildPhase; 328 | buildActionMask = 2147483647; 329 | files = ( 330 | ); 331 | inputFileListPaths = ( 332 | ); 333 | inputPaths = ( 334 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 335 | "${PODS_ROOT}/Manifest.lock", 336 | ); 337 | name = "[CP] Check Pods Manifest.lock"; 338 | outputFileListPaths = ( 339 | ); 340 | outputPaths = ( 341 | "$(DERIVED_FILE_DIR)/Pods-target_project-checkManifestLockResult.txt", 342 | ); 343 | runOnlyForDeploymentPostprocessing = 0; 344 | shellPath = /bin/sh; 345 | 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"; 346 | showEnvVarsInLog = 0; 347 | }; 348 | B6E7DFF17F208A5A96B4173A /* [CP] Check Pods Manifest.lock */ = { 349 | isa = PBXShellScriptBuildPhase; 350 | buildActionMask = 2147483647; 351 | files = ( 352 | ); 353 | inputFileListPaths = ( 354 | ); 355 | inputPaths = ( 356 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 357 | "${PODS_ROOT}/Manifest.lock", 358 | ); 359 | name = "[CP] Check Pods Manifest.lock"; 360 | outputFileListPaths = ( 361 | ); 362 | outputPaths = ( 363 | "$(DERIVED_FILE_DIR)/Pods-target_projectTests-checkManifestLockResult.txt", 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | shellPath = /bin/sh; 367 | 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"; 368 | showEnvVarsInLog = 0; 369 | }; 370 | EFFFDCDD25DCF2D664994350 /* [CP] Check Pods Manifest.lock */ = { 371 | isa = PBXShellScriptBuildPhase; 372 | buildActionMask = 2147483647; 373 | files = ( 374 | ); 375 | inputFileListPaths = ( 376 | ); 377 | inputPaths = ( 378 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 379 | "${PODS_ROOT}/Manifest.lock", 380 | ); 381 | name = "[CP] Check Pods Manifest.lock"; 382 | outputFileListPaths = ( 383 | ); 384 | outputPaths = ( 385 | "$(DERIVED_FILE_DIR)/Pods-target_projectUITests-checkManifestLockResult.txt", 386 | ); 387 | runOnlyForDeploymentPostprocessing = 0; 388 | shellPath = /bin/sh; 389 | 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"; 390 | showEnvVarsInLog = 0; 391 | }; 392 | F0F2BF72C87DFBAE32B36507 /* [CP] Embed Pods Frameworks */ = { 393 | isa = PBXShellScriptBuildPhase; 394 | buildActionMask = 2147483647; 395 | files = ( 396 | ); 397 | inputFileListPaths = ( 398 | ); 399 | inputPaths = ( 400 | "${PODS_ROOT}/Target Support Files/Pods-target_project/Pods-target_project-frameworks.sh", 401 | "${BUILT_PRODUCTS_DIR}/SRAirViews/SRAirViews.framework", 402 | "${BUILT_PRODUCTS_DIR}/SRPinView/SRPinView.framework", 403 | ); 404 | name = "[CP] Embed Pods Frameworks"; 405 | outputFileListPaths = ( 406 | ); 407 | outputPaths = ( 408 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SRAirViews.framework", 409 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SRPinView.framework", 410 | ); 411 | runOnlyForDeploymentPostprocessing = 0; 412 | shellPath = /bin/sh; 413 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-target_project/Pods-target_project-frameworks.sh\"\n"; 414 | showEnvVarsInLog = 0; 415 | }; 416 | /* End PBXShellScriptBuildPhase section */ 417 | 418 | /* Begin PBXSourcesBuildPhase section */ 419 | 0A65FD75226879C100D7CF44 /* Sources */ = { 420 | isa = PBXSourcesBuildPhase; 421 | buildActionMask = 2147483647; 422 | files = ( 423 | 0A65FD7F226879C100D7CF44 /* ViewController.swift in Sources */, 424 | 0A65FD7D226879C100D7CF44 /* AppDelegate.swift in Sources */, 425 | ); 426 | runOnlyForDeploymentPostprocessing = 0; 427 | }; 428 | 0A65FD89226879C200D7CF44 /* Sources */ = { 429 | isa = PBXSourcesBuildPhase; 430 | buildActionMask = 2147483647; 431 | files = ( 432 | 0A65FD92226879C200D7CF44 /* target_projectTests.swift in Sources */, 433 | ); 434 | runOnlyForDeploymentPostprocessing = 0; 435 | }; 436 | 0A65FD94226879C200D7CF44 /* Sources */ = { 437 | isa = PBXSourcesBuildPhase; 438 | buildActionMask = 2147483647; 439 | files = ( 440 | 0A65FD9D226879C200D7CF44 /* target_projectUITests.swift in Sources */, 441 | ); 442 | runOnlyForDeploymentPostprocessing = 0; 443 | }; 444 | /* End PBXSourcesBuildPhase section */ 445 | 446 | /* Begin PBXTargetDependency section */ 447 | 0A65FD8F226879C200D7CF44 /* PBXTargetDependency */ = { 448 | isa = PBXTargetDependency; 449 | target = 0A65FD78226879C100D7CF44 /* target_project */; 450 | targetProxy = 0A65FD8E226879C200D7CF44 /* PBXContainerItemProxy */; 451 | }; 452 | 0A65FD9A226879C200D7CF44 /* PBXTargetDependency */ = { 453 | isa = PBXTargetDependency; 454 | target = 0A65FD78226879C100D7CF44 /* target_project */; 455 | targetProxy = 0A65FD99226879C200D7CF44 /* PBXContainerItemProxy */; 456 | }; 457 | /* End PBXTargetDependency section */ 458 | 459 | /* Begin PBXVariantGroup section */ 460 | 0A65FD80226879C100D7CF44 /* Main.storyboard */ = { 461 | isa = PBXVariantGroup; 462 | children = ( 463 | 0A65FD81226879C100D7CF44 /* Base */, 464 | ); 465 | name = Main.storyboard; 466 | sourceTree = ""; 467 | }; 468 | 0A65FD85226879C100D7CF44 /* LaunchScreen.storyboard */ = { 469 | isa = PBXVariantGroup; 470 | children = ( 471 | 0A65FD86226879C100D7CF44 /* Base */, 472 | ); 473 | name = LaunchScreen.storyboard; 474 | sourceTree = ""; 475 | }; 476 | /* End PBXVariantGroup section */ 477 | 478 | /* Begin XCBuildConfiguration section */ 479 | 0A65FD9F226879C200D7CF44 /* Debug */ = { 480 | isa = XCBuildConfiguration; 481 | buildSettings = { 482 | ALWAYS_SEARCH_USER_PATHS = NO; 483 | CLANG_ANALYZER_NONNULL = YES; 484 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 485 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 486 | CLANG_CXX_LIBRARY = "libc++"; 487 | CLANG_ENABLE_MODULES = YES; 488 | CLANG_ENABLE_OBJC_ARC = YES; 489 | CLANG_ENABLE_OBJC_WEAK = YES; 490 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 491 | CLANG_WARN_BOOL_CONVERSION = YES; 492 | CLANG_WARN_COMMA = YES; 493 | CLANG_WARN_CONSTANT_CONVERSION = YES; 494 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 495 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 496 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 497 | CLANG_WARN_EMPTY_BODY = YES; 498 | CLANG_WARN_ENUM_CONVERSION = YES; 499 | CLANG_WARN_INFINITE_RECURSION = YES; 500 | CLANG_WARN_INT_CONVERSION = YES; 501 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 502 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 503 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 504 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 505 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 506 | CLANG_WARN_STRICT_PROTOTYPES = YES; 507 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 508 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 509 | CLANG_WARN_UNREACHABLE_CODE = YES; 510 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 511 | CODE_SIGN_IDENTITY = "iPhone Developer"; 512 | COPY_PHASE_STRIP = NO; 513 | DEBUG_INFORMATION_FORMAT = dwarf; 514 | ENABLE_STRICT_OBJC_MSGSEND = YES; 515 | ENABLE_TESTABILITY = YES; 516 | GCC_C_LANGUAGE_STANDARD = gnu11; 517 | GCC_DYNAMIC_NO_PIC = NO; 518 | GCC_NO_COMMON_BLOCKS = YES; 519 | GCC_OPTIMIZATION_LEVEL = 0; 520 | GCC_PREPROCESSOR_DEFINITIONS = ( 521 | "DEBUG=1", 522 | "$(inherited)", 523 | ); 524 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 525 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 526 | GCC_WARN_UNDECLARED_SELECTOR = YES; 527 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 528 | GCC_WARN_UNUSED_FUNCTION = YES; 529 | GCC_WARN_UNUSED_VARIABLE = YES; 530 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 531 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 532 | MTL_FAST_MATH = YES; 533 | ONLY_ACTIVE_ARCH = YES; 534 | SDKROOT = iphoneos; 535 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 536 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 537 | }; 538 | name = Debug; 539 | }; 540 | 0A65FDA0226879C200D7CF44 /* Release */ = { 541 | isa = XCBuildConfiguration; 542 | buildSettings = { 543 | ALWAYS_SEARCH_USER_PATHS = NO; 544 | CLANG_ANALYZER_NONNULL = YES; 545 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 546 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 547 | CLANG_CXX_LIBRARY = "libc++"; 548 | CLANG_ENABLE_MODULES = YES; 549 | CLANG_ENABLE_OBJC_ARC = YES; 550 | CLANG_ENABLE_OBJC_WEAK = YES; 551 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 552 | CLANG_WARN_BOOL_CONVERSION = YES; 553 | CLANG_WARN_COMMA = YES; 554 | CLANG_WARN_CONSTANT_CONVERSION = YES; 555 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 556 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 557 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 558 | CLANG_WARN_EMPTY_BODY = YES; 559 | CLANG_WARN_ENUM_CONVERSION = YES; 560 | CLANG_WARN_INFINITE_RECURSION = YES; 561 | CLANG_WARN_INT_CONVERSION = YES; 562 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 563 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 564 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 565 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 566 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 567 | CLANG_WARN_STRICT_PROTOTYPES = YES; 568 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 569 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 570 | CLANG_WARN_UNREACHABLE_CODE = YES; 571 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 572 | CODE_SIGN_IDENTITY = "iPhone Developer"; 573 | COPY_PHASE_STRIP = NO; 574 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 575 | ENABLE_NS_ASSERTIONS = NO; 576 | ENABLE_STRICT_OBJC_MSGSEND = YES; 577 | GCC_C_LANGUAGE_STANDARD = gnu11; 578 | GCC_NO_COMMON_BLOCKS = YES; 579 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 580 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 581 | GCC_WARN_UNDECLARED_SELECTOR = YES; 582 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 583 | GCC_WARN_UNUSED_FUNCTION = YES; 584 | GCC_WARN_UNUSED_VARIABLE = YES; 585 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 586 | MTL_ENABLE_DEBUG_INFO = NO; 587 | MTL_FAST_MATH = YES; 588 | SDKROOT = iphoneos; 589 | SWIFT_COMPILATION_MODE = wholemodule; 590 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 591 | VALIDATE_PRODUCT = YES; 592 | }; 593 | name = Release; 594 | }; 595 | 0A65FDA2226879C200D7CF44 /* Debug */ = { 596 | isa = XCBuildConfiguration; 597 | baseConfigurationReference = 7D0A9AE1A7644FF85D4B8C6F /* Pods-target_project.debug.xcconfig */; 598 | buildSettings = { 599 | CODE_SIGN_STYLE = Automatic; 600 | DEVELOPMENT_TEAM = 8EBV324DZA; 601 | INFOPLIST_FILE = target_project/Info.plist; 602 | LD_RUNPATH_SEARCH_PATHS = ( 603 | "$(inherited)", 604 | "@executable_path/Frameworks", 605 | ); 606 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.target-project"; 607 | PRODUCT_NAME = "$(TARGET_NAME)"; 608 | SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/target_project/Bridging-Header.h"; 609 | SWIFT_VERSION = 5.0; 610 | TARGETED_DEVICE_FAMILY = "1,2"; 611 | }; 612 | name = Debug; 613 | }; 614 | 0A65FDA3226879C200D7CF44 /* Release */ = { 615 | isa = XCBuildConfiguration; 616 | baseConfigurationReference = 19EA8135E4286684A8A6E808 /* Pods-target_project.release.xcconfig */; 617 | buildSettings = { 618 | CODE_SIGN_STYLE = Automatic; 619 | DEVELOPMENT_TEAM = 8EBV324DZA; 620 | INFOPLIST_FILE = target_project/Info.plist; 621 | LD_RUNPATH_SEARCH_PATHS = ( 622 | "$(inherited)", 623 | "@executable_path/Frameworks", 624 | ); 625 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.target-project"; 626 | PRODUCT_NAME = "$(TARGET_NAME)"; 627 | SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/target_project/Bridging-Header.h"; 628 | SWIFT_VERSION = 5.0; 629 | TARGETED_DEVICE_FAMILY = "1,2"; 630 | }; 631 | name = Release; 632 | }; 633 | 0A65FDA5226879C200D7CF44 /* Debug */ = { 634 | isa = XCBuildConfiguration; 635 | baseConfigurationReference = FD3FF2DB293A2D9C0C7055C1 /* Pods-target_projectTests.debug.xcconfig */; 636 | buildSettings = { 637 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 638 | BUNDLE_LOADER = "$(TEST_HOST)"; 639 | CODE_SIGN_STYLE = Automatic; 640 | DEVELOPMENT_TEAM = 8EBV324DZA; 641 | INFOPLIST_FILE = target_projectTests/Info.plist; 642 | LD_RUNPATH_SEARCH_PATHS = ( 643 | "$(inherited)", 644 | "@executable_path/Frameworks", 645 | "@loader_path/Frameworks", 646 | ); 647 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.target-projectTests"; 648 | PRODUCT_NAME = "$(TARGET_NAME)"; 649 | SWIFT_VERSION = 5.0; 650 | TARGETED_DEVICE_FAMILY = "1,2"; 651 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/target_project.app/target_project"; 652 | }; 653 | name = Debug; 654 | }; 655 | 0A65FDA6226879C200D7CF44 /* Release */ = { 656 | isa = XCBuildConfiguration; 657 | baseConfigurationReference = 18BBDA2AD67561BC26D2BEA1 /* Pods-target_projectTests.release.xcconfig */; 658 | buildSettings = { 659 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 660 | BUNDLE_LOADER = "$(TEST_HOST)"; 661 | CODE_SIGN_STYLE = Automatic; 662 | DEVELOPMENT_TEAM = 8EBV324DZA; 663 | INFOPLIST_FILE = target_projectTests/Info.plist; 664 | LD_RUNPATH_SEARCH_PATHS = ( 665 | "$(inherited)", 666 | "@executable_path/Frameworks", 667 | "@loader_path/Frameworks", 668 | ); 669 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.target-projectTests"; 670 | PRODUCT_NAME = "$(TARGET_NAME)"; 671 | SWIFT_VERSION = 5.0; 672 | TARGETED_DEVICE_FAMILY = "1,2"; 673 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/target_project.app/target_project"; 674 | }; 675 | name = Release; 676 | }; 677 | 0A65FDA8226879C200D7CF44 /* Debug */ = { 678 | isa = XCBuildConfiguration; 679 | baseConfigurationReference = CDAD3917E12006DC9A1C2AE8 /* Pods-target_projectUITests.debug.xcconfig */; 680 | buildSettings = { 681 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 682 | CODE_SIGN_STYLE = Automatic; 683 | DEVELOPMENT_TEAM = 8EBV324DZA; 684 | INFOPLIST_FILE = target_projectUITests/Info.plist; 685 | LD_RUNPATH_SEARCH_PATHS = ( 686 | "$(inherited)", 687 | "@executable_path/Frameworks", 688 | "@loader_path/Frameworks", 689 | ); 690 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.target-projectUITests"; 691 | PRODUCT_NAME = "$(TARGET_NAME)"; 692 | SWIFT_VERSION = 5.0; 693 | TARGETED_DEVICE_FAMILY = "1,2"; 694 | TEST_TARGET_NAME = target_project; 695 | }; 696 | name = Debug; 697 | }; 698 | 0A65FDA9226879C200D7CF44 /* Release */ = { 699 | isa = XCBuildConfiguration; 700 | baseConfigurationReference = 668A0FCB2AD9B0FA82BA0628 /* Pods-target_projectUITests.release.xcconfig */; 701 | buildSettings = { 702 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 703 | CODE_SIGN_STYLE = Automatic; 704 | DEVELOPMENT_TEAM = 8EBV324DZA; 705 | INFOPLIST_FILE = target_projectUITests/Info.plist; 706 | LD_RUNPATH_SEARCH_PATHS = ( 707 | "$(inherited)", 708 | "@executable_path/Frameworks", 709 | "@loader_path/Frameworks", 710 | ); 711 | PRODUCT_BUNDLE_IDENTIFIER = "com.seer.target-projectUITests"; 712 | PRODUCT_NAME = "$(TARGET_NAME)"; 713 | SWIFT_VERSION = 5.0; 714 | TARGETED_DEVICE_FAMILY = "1,2"; 715 | TEST_TARGET_NAME = target_project; 716 | }; 717 | name = Release; 718 | }; 719 | /* End XCBuildConfiguration section */ 720 | 721 | /* Begin XCConfigurationList section */ 722 | 0A65FD74226879C100D7CF44 /* Build configuration list for PBXProject "target_project" */ = { 723 | isa = XCConfigurationList; 724 | buildConfigurations = ( 725 | 0A65FD9F226879C200D7CF44 /* Debug */, 726 | 0A65FDA0226879C200D7CF44 /* Release */, 727 | ); 728 | defaultConfigurationIsVisible = 0; 729 | defaultConfigurationName = Release; 730 | }; 731 | 0A65FDA1226879C200D7CF44 /* Build configuration list for PBXNativeTarget "target_project" */ = { 732 | isa = XCConfigurationList; 733 | buildConfigurations = ( 734 | 0A65FDA2226879C200D7CF44 /* Debug */, 735 | 0A65FDA3226879C200D7CF44 /* Release */, 736 | ); 737 | defaultConfigurationIsVisible = 0; 738 | defaultConfigurationName = Release; 739 | }; 740 | 0A65FDA4226879C200D7CF44 /* Build configuration list for PBXNativeTarget "target_projectTests" */ = { 741 | isa = XCConfigurationList; 742 | buildConfigurations = ( 743 | 0A65FDA5226879C200D7CF44 /* Debug */, 744 | 0A65FDA6226879C200D7CF44 /* Release */, 745 | ); 746 | defaultConfigurationIsVisible = 0; 747 | defaultConfigurationName = Release; 748 | }; 749 | 0A65FDA7226879C200D7CF44 /* Build configuration list for PBXNativeTarget "target_projectUITests" */ = { 750 | isa = XCConfigurationList; 751 | buildConfigurations = ( 752 | 0A65FDA8226879C200D7CF44 /* Debug */, 753 | 0A65FDA9226879C200D7CF44 /* Release */, 754 | ); 755 | defaultConfigurationIsVisible = 0; 756 | defaultConfigurationName = Release; 757 | }; 758 | /* End XCConfigurationList section */ 759 | }; 760 | rootObject = 0A65FD71226879C100D7CF44 /* Project object */; 761 | } 762 | -------------------------------------------------------------------------------- /target_project/target_project.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /target_project/target_project.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /target_project/target_project.xcodeproj/project.xcworkspace/xcuserdata/seer.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project.xcodeproj/project.xcworkspace/xcuserdata/seer.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /target_project/target_project.xcodeproj/xcuserdata/seer.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | target_project.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 9 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /target_project/target_project/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/.DS_Store -------------------------------------------------------------------------------- /target_project/target_project/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // target_project 4 | // 5 | // Created by 黄彦棋 on 2019/4/18. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AMapFoundationKit 11 | import MAMapKit 12 | @UIApplicationMain 13 | class AppDelegate: UIResponder, UIApplicationDelegate,BMKLocationAuthDelegate { 14 | 15 | var window: UIWindow? 16 | 17 | 18 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 19 | AMapServices.shared()?.enableHTTPS = true 20 | AMapServices.shared()?.apiKey = "304dc392dd803df97037ca5373b508fa" 21 | 22 | let bmk = BMKMapManager.init() 23 | let ret = bmk.start("abf7arxd4qQm3SrAnyoyE48P3AqECtBg", generalDelegate: nil) 24 | if !ret { 25 | print("百度地图初始化错误") 26 | } 27 | 28 | BMKMapManager.setCoordinateTypeUsedInBaiduMapSDK(BMK_COORD_TYPE.COORDTYPE_COMMON) 29 | 30 | BMKLocationAuth.sharedInstance()?.checkPermision(withKey: "abf7arxd4qQm3SrAnyoyE48P3AqECtBg", authDelegate: self) 31 | return true 32 | } 33 | 34 | func onCheckPermissionState(_ iError: BMKLocationAuthErrorCode) { 35 | if iError.rawValue == 0 { 36 | print("百度地图定位鉴权成功. --- 百度SDK api架构真的很烂啊,有没有?") 37 | }else{ 38 | print("百度地图定位鉴权失败. --- 百度SDK api架构真的很烂啊,有没有?") 39 | } 40 | } 41 | 42 | func applicationWillResignActive(_ application: UIApplication) { 43 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 44 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 45 | } 46 | 47 | func applicationDidEnterBackground(_ application: UIApplication) { 48 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 49 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 50 | } 51 | 52 | func applicationWillEnterForeground(_ application: UIApplication) { 53 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 54 | } 55 | 56 | func applicationDidBecomeActive(_ application: UIApplication) { 57 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 58 | } 59 | 60 | func applicationWillTerminate(_ application: UIApplication) { 61 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 62 | } 63 | 64 | 65 | } 66 | 67 | -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/.DS_Store -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/AppIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "scale" : "3x" 14 | } 15 | ], 16 | "info" : { 17 | "version" : 1, 18 | "author" : "xcode" 19 | } 20 | } -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/reduce.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "jian.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "jian-2.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/reduce.imageset/jian-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/reduce.imageset/jian-2.png -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/reduce.imageset/jian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/reduce.imageset/jian.png -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/start.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "kaishi-4.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "kaishi-5.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/start.imageset/kaishi-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/start.imageset/kaishi-4.png -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/start.imageset/kaishi-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/start.imageset/kaishi-5.png -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/stop.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "weibiaoti517-2.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "weibiaoti517.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/stop.imageset/weibiaoti517-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/stop.imageset/weibiaoti517-2.png -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/stop.imageset/weibiaoti517.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/stop.imageset/weibiaoti517.png -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/to_my_location.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "target-lock-6.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "target-lock-7.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/to_my_location.imageset/target-lock-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/to_my_location.imageset/target-lock-6.png -------------------------------------------------------------------------------- /target_project/target_project/Assets.xcassets/to_my_location.imageset/target-lock-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HuangYanQi/iOSDynamicLocation/94aca87a37e8d14cfbfbd9fae6c23db64a2068d6/target_project/target_project/Assets.xcassets/to_my_location.imageset/target-lock-7.png -------------------------------------------------------------------------------- /target_project/target_project/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /target_project/target_project/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /target_project/target_project/Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Bridging-Header.h 3 | // target_project 4 | // 5 | // Created by 黄彦棋 on 2019/4/18. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | #ifndef Bridging_Header_h 10 | #define Bridging_Header_h 11 | 12 | #import //引入base相关所有的头文件 13 | #import //引入地图功能所有的头文件 14 | #import //引入检索功能所有的头文件 15 | #import //引入云检索功能所有的头文件 16 | #import //引入计算工具所有的头文件 17 | #import //只引入所需的单个头文件 18 | #import 19 | #import 20 | 21 | #endif /* Bridging_Header_h */ 22 | -------------------------------------------------------------------------------- /target_project/target_project/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | 目标app 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSLocationAlwaysUsageDescription 26 | 始终允许访问位置信息 27 | NSLocationUsageDescription 28 | 永不允许访问位置信息 29 | NSLocationWhenInUseUsageDescription 30 | 使用应用期间允许访问位置信息 31 | UILaunchStoryboardName 32 | LaunchScreen 33 | UIMainStoryboardFile 34 | Main 35 | UIRequiredDeviceCapabilities 36 | 37 | armv7 38 | 39 | UISupportedInterfaceOrientations 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationLandscapeLeft 43 | UIInterfaceOrientationLandscapeRight 44 | 45 | UISupportedInterfaceOrientations~ipad 46 | 47 | UIInterfaceOrientationPortrait 48 | UIInterfaceOrientationPortraitUpsideDown 49 | UIInterfaceOrientationLandscapeLeft 50 | UIInterfaceOrientationLandscapeRight 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /target_project/target_project/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // target_project 4 | // 5 | // Created by 黄彦棋 on 2019/4/18. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AMapFoundationKit 11 | import MAMapKit 12 | class ViewController: UIViewController { 13 | 14 | @IBOutlet weak var mapContainer: UIView! 15 | 16 | @IBOutlet weak var segment: UISegmentedControl! 17 | 18 | let userLocation:BMKUserLocation = BMKUserLocation.init() 19 | let locationManager:BMKLocationManager = BMKLocationManager.init() 20 | 21 | lazy var bdMapView:BMKMapView = { 22 | return BMKMapView.init(frame: mapContainer.bounds) 23 | }() 24 | 25 | lazy var gdMapView:MAMapView = { 26 | return MAMapView.init(frame: mapContainer.bounds) 27 | }() 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | 32 | bdMapView.userTrackingMode = BMKUserTrackingModeFollow 33 | bdMapView.showsUserLocation = true 34 | bdMapView.zoomLevel = 16.4 35 | locationManager.delegate = self 36 | locationManager.pausesLocationUpdatesAutomatically = false 37 | locationManager.startUpdatingLocation() 38 | locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 39 | locationManager.coordinateType = BMKLocationCoordinateType.GCJ02 40 | 41 | gdMapView.userTrackingMode = MAUserTrackingMode.follow 42 | gdMapView.showsUserLocation = true 43 | gdMapView.zoomLevel = 15 44 | 45 | mapContainer.addSubview(bdMapView) 46 | mapContainer.addSubview(gdMapView) 47 | } 48 | 49 | override func viewWillAppear(_ animated: Bool) { 50 | super.viewWillAppear(animated) 51 | if let _ = bdMapView.superview { 52 | bdMapView.viewWillAppear() 53 | } 54 | } 55 | 56 | override func viewWillDisappear(_ animated: Bool) { 57 | super.viewWillDisappear(animated) 58 | 59 | if let _ = bdMapView.superview{ 60 | bdMapView.viewWillDisappear() 61 | locationManager.stopUpdatingLocation() 62 | } 63 | } 64 | 65 | var segmentIndex:Int{ 66 | get{ 67 | return segment.selectedSegmentIndex 68 | } 69 | } 70 | 71 | @IBAction func switchMap(_ sender: Any) { 72 | if segmentIndex == 1 { 73 | mapContainer.bringSubviewToFront(bdMapView) 74 | }else{ 75 | mapContainer.bringSubviewToFront(gdMapView) 76 | } 77 | } 78 | 79 | @IBAction func reduce(_ sender: Any) { 80 | if segmentIndex == 0 { 81 | if gdMapView.zoomLevel - 0.5 > gdMapView.minZoomLevel{ 82 | gdMapView.setZoomLevel(gdMapView.zoomLevel - 0.5, animated: true) 83 | }else{ 84 | gdMapView.setZoomLevel(gdMapView.minZoomLevel, animated: true) 85 | } 86 | }else{ 87 | if bdMapView.zoomLevel - 0.5 > bdMapView.minZoomLevel{ 88 | bdMapView.zoomLevel = bdMapView.zoomLevel - 0.5 89 | }else{ 90 | bdMapView.zoomLevel = bdMapView.minZoomLevel 91 | } 92 | } 93 | } 94 | 95 | @IBAction func gotoGPSLocation(_ sender: Any) { 96 | if segmentIndex == 0 { 97 | gdMapView.setUserTrackingMode(.follow, animated: true) 98 | gdMapView.setZoomLevel(17, animated: true) 99 | }else{ 100 | bdMapView.zoomLevel = 18.4 101 | gdMapView.userTrackingMode = MAUserTrackingMode.follow 102 | } 103 | } 104 | } 105 | 106 | extension ViewController:BMKLocationManagerDelegate{ 107 | func bmkLocationManager(_ manager: BMKLocationManager, didUpdate heading: CLHeading?) { 108 | guard heading != nil else{ 109 | return 110 | } 111 | 112 | userLocation.heading = heading! 113 | bdMapView.updateLocationData(userLocation) 114 | } 115 | 116 | func bmkLocationManager(_ manager: BMKLocationManager, didUpdate location: BMKLocation?, orError error: Error?) { 117 | guard location != nil else{ 118 | return 119 | } 120 | 121 | userLocation.location = location!.location! 122 | bdMapView.updateLocationData(userLocation) 123 | } 124 | } 125 | 126 | 127 | -------------------------------------------------------------------------------- /target_project/target_projectTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /target_project/target_projectTests/target_projectTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // target_projectTests.swift 3 | // target_projectTests 4 | // 5 | // Created by 黄彦棋 on 2019/4/18. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import target_project 11 | 12 | class target_projectTests: XCTestCase { 13 | 14 | override func setUp() { 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | } 21 | 22 | func testExample() { 23 | // This is an example of a functional test case. 24 | // Use XCTAssert and related functions to verify your tests produce the correct results. 25 | } 26 | 27 | func testPerformanceExample() { 28 | // This is an example of a performance test case. 29 | self.measure { 30 | // Put the code you want to measure the time of here. 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /target_project/target_projectUITests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /target_project/target_projectUITests/target_projectUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // target_projectUITests.swift 3 | // target_projectUITests 4 | // 5 | // Created by 黄彦棋 on 2019/4/18. 6 | // Copyright © 2019 seer. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class target_projectUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | // Put setup code here. This method is called before the invocation of each test method in the class. 15 | 16 | // In UI tests it is usually best to stop immediately when a failure occurs. 17 | continueAfterFailure = false 18 | 19 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 20 | XCUIApplication().launch() 21 | 22 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 23 | } 24 | 25 | override func tearDown() { 26 | // Put teardown code here. This method is called after the invocation of each test method in the class. 27 | } 28 | 29 | func testExample() { 30 | // Use recording to get started writing UI tests. 31 | // Use XCTAssert and related functions to verify your tests produce the correct results. 32 | } 33 | 34 | } 35 | --------------------------------------------------------------------------------