Core SDK Overview
The AMAP iOS Base SDK provides the core foundation and shared resources required by all AMAP iOS SDKs, including the Map SDK, Location SDK, and Navigation SDK. You must integrate this SDK before using any other AMAP iOS SDK.
Before You Begin
1. Starting with iOS Map SDK V4.0.0, iOS Location SDK V2.0.0, and iOS Navigation SDK V2.0.0, all AMAP iOS SDKs require the Base SDK.
2. The Base SDK V1.2.0 and later includes IDFA services. If your app does not use these services, see Submitting to the App Store.
3. Configure your AMAP API key as follows:
[AMapServices sharedServices].apiKey = @"Your API Key";Configure Permissions
Network Permissions — HTTPS Support (Required)
App Transport Security (ATS) is a security feature introduced by Apple in iOS 9. When enabled, ATS forces apps to connect to network services over HTTPS instead of HTTP, protecting user data through encryption. While ATS is enabled by default, developers could previously disable it. However, starting January 1, 2017, Apple requires all apps submitted to the App Store to have ATS enabled.
The following steps describe how to configure AMAP iOS SDKs for ATS compliance.
Step 1: Update the SDK
Update your SDK to the minimum version listed in the table below.
Step 2: Enable HTTPS
Add the following code before configuring your AMAP API key:
[[AMapServices sharedServices] setEnableHTTPS:YES];IDFA Permissions (Optional)
The Base SDK V1.2.0 and later includes IDFA (Identifier for Advertisers). This may affect your app's App Store review process.
Purpose of IDFA
IDFA helps identify users more accurately, allowing us to better track issues you encounter while using the SDK and ensure SDK stability. If your app integrates advertising services, we recommend using the standard version of the SDK.
If your app does not integrate any advertising services but needs to track ad-driven installs, you can still use the standard version. See the instructions below.
IDFA Options During App Store Review
When submitting your app to the App Store, you must select the appropriate IDFA options:

The four options represent the following:
1. Serve advertisements within the app — Select this if your app displays ads.
2. Attribute this app installation to a previously served specific advertisement — Select this if you use third-party tools to track ad-driven installs and other events, even if your app does not display ads.
3. Attribute an action taken within this app to a previously served specific advertisement — Select this if you use third-party tools to track ad-driven user actions.
4. iOS "Limit Ad Tracking" setting — Select this if your app accesses IDFA. This option is required whenever you use IDFA.
Resolving App Store Rejection
- If your app only displays ads and does not track ad-driven installs, select options 1 and 4.
- If your app does not display ads but accesses IDFA, select options 2 and 4.
Using the IDFA-Free Version
If you prefer not to use the IDFA version, download the IDFA-free version.
Alternatively, use CocoaPods:
1. Edit your Podfile:
platform :ios, '9.0'
target 'YourProjectTarget' do
pod 'AMapLocation-NO-IDFA' # IDFA-free Location SDK
end2. Run the following command:
pod installIf the SDK cannot be updated, run pod repo update to update your local CocoaPods repository.
Wi-Fi Information Permissions (Optional)
On iOS 12 and later, you must enable the Wi-Fi information capability in Xcode. This automatically adds the required permission to your App ID and app's entitlements.
Configuration Steps
1. In Xcode, navigate to your project target:
Xcode → [Project Name] → Targets → [Target Name] → Capabilities
2. Find Access WiFi Information and toggle it ON.

After completing these steps, your app's .entitlements file will include the following key-value pair:

Your app can now retrieve the Wi-Fi SSID on iOS 12 and later.
Region & Language Settings
/// Country code property
@property (nonatomic, copy) NSString *countryCode;
[AMapServices sharedServices].countryCode = @"SG";
// Language type
typedef NS_ENUM(int, AMapRegionLanguageType)
{
/// Simplified Chinese
AMapRegionLanguageTypeZhHans = 0,
/// Traditional Chinese (Hong Kong)
AMapRegionLanguageTypeZhHantHk,
/// English
AMapRegionLanguageTypeEn,
/// Spanish
AMapRegionLanguageTypeEs,
/// Portuguese
AMapRegionLanguageTypePt,
/// French
AMapRegionLanguageTypeFr,
/// German
AMapRegionLanguageTypeDe,
/// Thai
AMapRegionLanguageTypeTh,
/// Japanese
AMapRegionLanguageTypeJa,
/// Korean
AMapRegionLanguageTypeKo,
/// Arabic
AMapRegionLanguageTypeAr,
/// Turkish
AMapRegionLanguageTypeTr,
/// Hebrew
AMapRegionLanguageTypeHe,
/// Italian
AMapRegionLanguageTypeIt,
/// Russian
AMapRegionLanguageTypeRu,
/// Malay
AMapRegionLanguageTypeMs,
/// Indonesian
AMapRegionLanguageTypeId,
/// Vietnamese
AMapRegionLanguageTypeVi,
/// Polish
AMapRegionLanguageTypePl,
/// Czech
AMapRegionLanguageTypeCs,
/// Ukrainian
AMapRegionLanguageTypeUk,
/// Azerbaijani
AMapRegionLanguageTypeAz,
/// Max Value Marker
AMapRegionLanguageTypeMax
};
[AMapServices sharedServices].regionLanguageType = AMapRegionLanguageTypeEn;
// RTL Status:
// 0: Not set, follows the global setting
// 1: Disabled
// 2: Force enabled
typedef NS_ENUM(NSInteger, AMapAttributeRTLState)
{
AMapAttributeRTLStateDefault = 0, // Not set, follows the global setting
AMapAttributeRTLStateDisabled, // Disabled
AMapAttributeRTLStateEnabled // Force enabled
};
[AMapServices sharedServices].enableRTLLayout = AMapAttributeRTLStateEnabled;