diff --git a/.github/workflows/pull_request_test.yml b/.github/workflows/pull_request_test.yml
index 351c85a4..596769ec 100644
--- a/.github/workflows/pull_request_test.yml
+++ b/.github/workflows/pull_request_test.yml
@@ -3,25 +3,33 @@ name: PullRequestTest
on:
pull_request:
branches:
- - release
+ - dev
+
jobs:
build_test:
- runs-on: macos-latest
+ runs-on: macos-13
steps:
- uses: actions/checkout@v2
- - name: Setup Xcode version
- uses: maxim-lobanov/setup-xcode@v1
- with:
- xcode-version: "14.2.0"
-
- name: Bring ignored files
uses: actions/checkout@v3
with:
- repository: Pepsi-Club/BusComing-ignored
+ repository: Pepsi-Club/WhereMyBus-ignored
path: XCConfig/
token: ${{ secrets.ACTION_TOKEN }}
-
+
+ - name: Setup Xcode version
+ uses: maxim-lobanov/setup-xcode@v1
+ with:
+ xcode-version: "14.3"
+
+ - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf
+ with:
+ swift-version: "5.8.0"
+
+ - name: Get swift version
+ run: swift --version
+
- name: Install Tuist
run: curl -Ls https://install.tuist.io|bash
diff --git a/.github/workflows/upload_testflight.yml b/.github/workflows/upload_testflight.yml
index 30a7dc48..2a6bcd03 100644
--- a/.github/workflows/upload_testflight.yml
+++ b/.github/workflows/upload_testflight.yml
@@ -1,12 +1,13 @@
name: UploadTestflight
on:
- push:
+ pull_request:
branches:
- - release
+ - main
+
jobs:
upload_testflight:
- runs-on: macos-latest
+ runs-on: macos-13
steps:
- uses: actions/checkout@v2
@@ -15,18 +16,26 @@ jobs:
key: ${{ secrets.SSH_KEY }}
known_hosts: ${{ secrets.KNOWN_HOSTS }}
- - name: Setup Xcode version
- uses: maxim-lobanov/setup-xcode@v1
- with:
- xcode-version: "14.2.0"
-
- name: Bring ignored files
uses: actions/checkout@v3
with:
- repository: Pepsi-Club/BusComing-ignored
+ repository: Pepsi-Club/WhereMyBus-ignored
path: XCConfig/
token: ${{ secrets.ACTION_TOKEN }}
+ - name: Move GoogleService Plist
+ run: |
+ mv XCConfig/GoogleService-Info.plist Projects/App/Resources/
+
+ - name: Setup Xcode version
+ uses: maxim-lobanov/setup-xcode@v1
+ with:
+ xcode-version: "14.3"
+
+ - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf
+ with:
+ swift-version: "5.8.0"
+
- name: Install Tuist
run: curl -Ls https://install.tuist.io|bash
@@ -47,7 +56,8 @@ jobs:
env:
KEYCHAIN_NAME: ${{ secrets.KEYCHAIN_NAME }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
- MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
APP_STORE_KEY_ID: ${{ secrets.APP_STORE_KEY_ID }}
APP_STORE_ISSUER_ID: ${{ secrets.APP_STORE_ISSUER_ID }}
APP_STORE_PRIVATE_KEY: ${{ secrets.APP_STORE_PRIVATE_KEY }}
+ MATCH_URL: ${{ secrets.MATCH_URL }}
+ MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
diff --git a/.gitignore b/.gitignore
index bbd4005f..110a6866 100644
--- a/.gitignore
+++ b/.gitignore
@@ -143,7 +143,7 @@ Derived/
Tuist/Dependencies
# PList
-**/*.plist
+Projects/**/*.plist
# XCConfig
XCConfig/
@@ -157,4 +157,7 @@ XCConfig/
# Package.resolved
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
-# .swiftpm
\ No newline at end of file
+# .swiftpm
+
+# CocoaPods
+Pods/
\ No newline at end of file
diff --git a/.swiftlint.yml b/.swiftlint.yml
index d9a15cf9..9b0bd349 100644
--- a/.swiftlint.yml
+++ b/.swiftlint.yml
@@ -1,9 +1,11 @@
-included:
- - Projects
excluded: # 린트 과정에서 무시할 파일 경로. `included`보다 우선순위 높음
- Projects/App/Sources/AppDelegate.swift
- Projects/App/Sources/SceneDelegate.swift
+ - Projects/App/Tests/**
+ - Projects/Core/Sources/Extension/String+.swift
- Projects/Feature/**/AppDelegate.swift
+ - Projects/Feature/**/SceneDelegate.swift
+ - Projects/FeatureDependency/Sources/Mock/**
- Tuist
- Derived
- Plugins
@@ -14,11 +16,14 @@ identifier_name:
error: 3
excluded: # 제외할 문자열 목록
- f
+ - vc
+ - vm
+ - o
function_body_length:
warning: 150
error: 300
type_body_length:
- warning: 300
+ warning: 400
error: 500
file_length:
warning: 1000
@@ -30,5 +35,6 @@ disabled_rules: # 제외하고 싶은 룰
- trailing_whitespace
- type_name # 타입명에 _가 들어가면 경고
- trailing_comma # 배열 마지막 아이템에 ,가 붙으면 경고
+ - nesting # 중첩타입
opt_in_rules:
- empty_string
diff --git a/.tuist-version b/.tuist-version
index 1c92f6b1..0f414fd3 100644
--- a/.tuist-version
+++ b/.tuist-version
@@ -1 +1 @@
-3.26.0
\ No newline at end of file
+3.28.0
\ No newline at end of file
diff --git a/Document/DependencyGraph/graph.png b/Document/DependencyGraph/graph.png
new file mode 100644
index 00000000..b199ee21
Binary files /dev/null and b/Document/DependencyGraph/graph.png differ
diff --git a/Document/ko/iPhone 15 Pro-0_EmptyFavorites.png b/Document/ko/iPhone 15 Pro-0_EmptyFavorites.png
new file mode 100644
index 00000000..3b586698
Binary files /dev/null and b/Document/ko/iPhone 15 Pro-0_EmptyFavorites.png differ
diff --git a/Document/ko/iPhone 15 Pro-1_Favorites.png b/Document/ko/iPhone 15 Pro-1_Favorites.png
new file mode 100644
index 00000000..89230c91
Binary files /dev/null and b/Document/ko/iPhone 15 Pro-1_Favorites.png differ
diff --git a/Document/ko/iPhone 15 Pro-2_RecentSearch.png b/Document/ko/iPhone 15 Pro-2_RecentSearch.png
new file mode 100644
index 00000000..f907eb86
Binary files /dev/null and b/Document/ko/iPhone 15 Pro-2_RecentSearch.png differ
diff --git a/Document/ko/iPhone 15 Pro-3_Search.png b/Document/ko/iPhone 15 Pro-3_Search.png
new file mode 100644
index 00000000..3a1e03b6
Binary files /dev/null and b/Document/ko/iPhone 15 Pro-3_Search.png differ
diff --git a/Document/ko/iPhone 15 Pro-4_BusStop.png b/Document/ko/iPhone 15 Pro-4_BusStop.png
new file mode 100644
index 00000000..3118609b
Binary files /dev/null and b/Document/ko/iPhone 15 Pro-4_BusStop.png differ
diff --git a/Document/ko/iPhone 8 Plus-0_EmptyFavorites.png b/Document/ko/iPhone 8 Plus-0_EmptyFavorites.png
new file mode 100644
index 00000000..7ff46bed
Binary files /dev/null and b/Document/ko/iPhone 8 Plus-0_EmptyFavorites.png differ
diff --git a/Document/ko/iPhone 8 Plus-1_Favorites.png b/Document/ko/iPhone 8 Plus-1_Favorites.png
new file mode 100644
index 00000000..71da7bcc
Binary files /dev/null and b/Document/ko/iPhone 8 Plus-1_Favorites.png differ
diff --git a/Document/ko/iPhone 8 Plus-2_RecentSearch.png b/Document/ko/iPhone 8 Plus-2_RecentSearch.png
new file mode 100644
index 00000000..cb448ed4
Binary files /dev/null and b/Document/ko/iPhone 8 Plus-2_RecentSearch.png differ
diff --git a/Document/ko/iPhone 8 Plus-3_Search.png b/Document/ko/iPhone 8 Plus-3_Search.png
new file mode 100644
index 00000000..429be754
Binary files /dev/null and b/Document/ko/iPhone 8 Plus-3_Search.png differ
diff --git a/Document/ko/iPhone 8 Plus-4_BusStop.png b/Document/ko/iPhone 8 Plus-4_BusStop.png
new file mode 100644
index 00000000..b24c29ae
Binary files /dev/null and b/Document/ko/iPhone 8 Plus-4_BusStop.png differ
diff --git a/Document/ko/iPhone_15_Pro-0_EmptyFavorites.png b/Document/ko/iPhone_15_Pro-0_EmptyFavorites.png
new file mode 100644
index 00000000..7b1eb9a7
Binary files /dev/null and b/Document/ko/iPhone_15_Pro-0_EmptyFavorites.png differ
diff --git a/Document/ko/iPhone_15_Pro-1_Favorites.png b/Document/ko/iPhone_15_Pro-1_Favorites.png
new file mode 100644
index 00000000..b623a076
Binary files /dev/null and b/Document/ko/iPhone_15_Pro-1_Favorites.png differ
diff --git a/Document/ko/iPhone_15_Pro-2_RecentSearch.png b/Document/ko/iPhone_15_Pro-2_RecentSearch.png
new file mode 100644
index 00000000..5a38951a
Binary files /dev/null and b/Document/ko/iPhone_15_Pro-2_RecentSearch.png differ
diff --git a/Document/ko/iPhone_15_Pro-3_Search.png b/Document/ko/iPhone_15_Pro-3_Search.png
new file mode 100644
index 00000000..be3d35e5
Binary files /dev/null and b/Document/ko/iPhone_15_Pro-3_Search.png differ
diff --git a/Document/ko/iPhone_15_Pro-4_BusStop.png b/Document/ko/iPhone_15_Pro-4_BusStop.png
new file mode 100644
index 00000000..e936a9ca
Binary files /dev/null and b/Document/ko/iPhone_15_Pro-4_BusStop.png differ
diff --git a/Document/ko/iPhone_15_Pro-5_NearMap.png b/Document/ko/iPhone_15_Pro-5_NearMap.png
new file mode 100644
index 00000000..e55a048b
Binary files /dev/null and b/Document/ko/iPhone_15_Pro-5_NearMap.png differ
diff --git a/Document/ko/iPhone_15_Pro-6_RegularAlarm.png b/Document/ko/iPhone_15_Pro-6_RegularAlarm.png
new file mode 100644
index 00000000..b1c4aeb0
Binary files /dev/null and b/Document/ko/iPhone_15_Pro-6_RegularAlarm.png differ
diff --git a/Document/ko/iPhone_8_Plus-0_EmptyFavorites.png b/Document/ko/iPhone_8_Plus-0_EmptyFavorites.png
new file mode 100644
index 00000000..d7d406df
Binary files /dev/null and b/Document/ko/iPhone_8_Plus-0_EmptyFavorites.png differ
diff --git a/Document/ko/iPhone_8_Plus-1_Favorites.png b/Document/ko/iPhone_8_Plus-1_Favorites.png
new file mode 100644
index 00000000..e034e094
Binary files /dev/null and b/Document/ko/iPhone_8_Plus-1_Favorites.png differ
diff --git a/Document/ko/iPhone_8_Plus-2_RecentSearch.png b/Document/ko/iPhone_8_Plus-2_RecentSearch.png
new file mode 100644
index 00000000..0c2622b1
Binary files /dev/null and b/Document/ko/iPhone_8_Plus-2_RecentSearch.png differ
diff --git a/Document/ko/iPhone_8_Plus-3_Search.png b/Document/ko/iPhone_8_Plus-3_Search.png
new file mode 100644
index 00000000..412313c0
Binary files /dev/null and b/Document/ko/iPhone_8_Plus-3_Search.png differ
diff --git a/Document/ko/iPhone_8_Plus-4_BusStop.png b/Document/ko/iPhone_8_Plus-4_BusStop.png
new file mode 100644
index 00000000..278a13c7
Binary files /dev/null and b/Document/ko/iPhone_8_Plus-4_BusStop.png differ
diff --git a/Document/ko/iPhone_8_Plus-5_NearMap.png b/Document/ko/iPhone_8_Plus-5_NearMap.png
new file mode 100644
index 00000000..a3ee71d4
Binary files /dev/null and b/Document/ko/iPhone_8_Plus-5_NearMap.png differ
diff --git a/Document/ko/iPhone_8_Plus-6_RegularAlarm.png b/Document/ko/iPhone_8_Plus-6_RegularAlarm.png
new file mode 100644
index 00000000..f8f37bb0
Binary files /dev/null and b/Document/ko/iPhone_8_Plus-6_RegularAlarm.png differ
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/Info.plist b/Frameworks/NMapsMap/NMapsGeometry.xcframework/Info.plist
new file mode 100644
index 00000000..3088f7c9
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/Info.plist
@@ -0,0 +1,42 @@
+
+
+
+
+ AvailableLibraries
+
+
+ LibraryIdentifier
+ ios-arm64_i386_x86_64-simulator
+ LibraryPath
+ NMapsGeometry.framework
+ SupportedArchitectures
+
+ arm64
+ i386
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ LibraryIdentifier
+ ios-arm64_armv7
+ LibraryPath
+ NMapsGeometry.framework
+ SupportedArchitectures
+
+ arm64
+ armv7
+
+ SupportedPlatform
+ ios
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGBounds.h
new file mode 100644
index 00000000..93f99b1a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGBounds.h
@@ -0,0 +1,48 @@
+//
+// NMGBounds.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 6..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGPoint;
+
+/**
+ 지도에 보여지는 사각형 영역을 정의한 Bounds.
+ NMGBounds는 평면직교 좌표계에 대한 클래스입니다.
+ */
+NMG_EXPORT
+@interface NMGBounds : NSObject
+
+@property (nonatomic, nonnull) NMGPoint *min;
+@property (nonatomic, nonnull) NMGPoint *max;
+
+@property (nonatomic, readonly, nonnull) NMGPoint *center;
+@property (nonatomic, readonly) double width;
+@property (nonatomic, readonly) double height;
+
+@property (nonatomic, readonly) double minX;
+@property (nonatomic, readonly) double minY;
+@property (nonatomic, readonly) double maxX;
+@property (nonatomic, readonly) double maxY;
+
++ (nonnull instancetype)bounds;
++ (nonnull instancetype)boundsWithMinX:(double)minX minY:(double)minY maxX:(double)maxX maxY:(double)maxY;
++ (nonnull instancetype)boundsWithMinX:(double)x minY:(double)y width:(double)width height:(double)height;
++ (nonnull instancetype)boundsWithMin:(nonnull NMGPoint *)min max:(nonnull NMGPoint *)max;
+
+- (BOOL)hasPoint:(nonnull NMGPoint *)point;
+- (BOOL)hasBounds:(nonnull NMGBounds *)bounds;
+- (BOOL)isIntersect:(nonnull NMGBounds *)bounds;
+- (nullable NMGBounds *)intersectionWithBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result));
+- (nonnull NMGBounds *)expandToPoint:(nonnull NMGPoint *)point __attribute__((warn_unused_result));
+- (nonnull NMGBounds *)unionBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result));
+
+@end
+
+static inline NMGBounds * _Nonnull NMGBoundsMake(double minX, double minY, double maxX, double maxY) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGBounds boundsWithMinX:minX minY:minY maxX:maxX maxY:maxY];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGConstants.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGConstants.h
new file mode 100644
index 00000000..1457de86
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGConstants.h
@@ -0,0 +1,16 @@
+#import "NMGGeometry.h"
+
+#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
+#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
+
+static const double NaN = 0.0 / 0.0;
+static const double POSITIVE_INFINITY = 1.0 / 0.0;
+static const double NEGATIVE_INFINITY = -1.0 / 0.0;
+
+static const double HALFPI = M_PI / 2;
+static const double TWOPI = M_PI * 2;
+
+/**
+ 지구의 적도 반경. 미터 단위.
+ */
+const static double NMG_EARTH_RADIUS = 6378137;
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGGeometry.h
new file mode 100644
index 00000000..3276cd62
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGGeometry.h
@@ -0,0 +1,66 @@
+//
+// NMGGeometry
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 1. 10..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import
+
+#define NMG_EXPORT __attribute__((visibility ("default")))
+
+#pragma mark NMGGeometry Protocol
+
+@class NMGLatLng;
+@protocol NMGBoundable;
+
+@protocol NMGGeometry
+
+@property (nonatomic, readonly) BOOL isEmpty;
+@property (nonatomic, readonly) BOOL isValid;
+@property (nonatomic, readonly, nonnull, copy) NSString *description;
+
+@optional
+@property (nonatomic, readonly, nonnull) id bounds;
+@end
+
+@protocol NMGPointable
+@optional
+- (nonnull NMGLatLng *)toLatLng;
+- (BOOL)isWithinCoverage;
+
+@end
+
+#pragma mark - NMGMultiPointable Protocol
+
+@protocol NMGMultiPointable
+
+@required
+@property (nonatomic, readonly, nonnull) NSArray *points;
+@property (nonatomic, readonly) NSUInteger count;
+- (void)addPoint:(nonnull id)point;
+- (nullable id)pointAtIndex:(NSUInteger)index;
+
+@optional
+- (void)insertPoint:(nonnull id)point atIndex:(NSUInteger)index;
+- (void)removePointAtIndex:(NSUInteger)index;
+- (void)removePoint:(nonnull id)point;
+
+- (void)addCoordinate:(CLLocationCoordinate2D)coordinate;
+- (void)insertCoordinate:(CLLocationCoordinate2D)coordinate atIndex:(NSUInteger)index;
+
+@end
+
+#pragma mark - NMGBoundable Protocol
+
+@protocol NMGBoundable
+
+- (BOOL)hasPoint:(nonnull id)point;
+- (BOOL)hasBounds:(nonnull id)bounds;
+- (BOOL)isIntersect:(nonnull id)bounds;
+- (nullable id)intersectionWithBounds:(nonnull id)bounds __attribute__((warn_unused_result));
+- (nonnull id)expandToPoint:(nonnull id)point __attribute__((warn_unused_result));
+- (nonnull id)unionBounds:(nonnull id)bounds __attribute__((warn_unused_result));
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLng.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLng.h
new file mode 100644
index 00000000..d149b97a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLng.h
@@ -0,0 +1,132 @@
+//
+// NMGLatLng.h
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 1. 10..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGLatLngBounds;
+@class NMGXyz;
+
+/**
+ 최소 위도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MINIMUM_LATITUDE = -90;
+
+/**
+ 최대 위도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MAXIMUM_LATITUDE = 90;
+
+/**
+ 최소 경도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MINIMUM_LONGITUDE = -180;
+
+/**
+ 최대 경도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MAXIMUM_LONGITUDE = 180;
+
+/**
+ 위경도 좌표를 나타내는 클래스.
+
+ `CLLocationCoordinate2D`과 달리 위도와 경도를 `double`형으로 표현합니다.
+ */
+NMG_EXPORT
+@interface NMGLatLng : NSObject
+
+/**
+ 위도. 도 단위.
+ */
+@property (nonatomic) double lat;
+
+/**
+ 경도. 도 단위.
+ */
+@property (nonatomic) double lng;
+
+/**
+ 위경도 좌표로 나타낼 수 있는 커버리지 영역. 전 세계
+
+ @return `NMGLatLngBounds` 객체.
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ * 유효하지 않은(`isValid`가 `NO`인) 좌표를 나타내는 상수.
+ */
++ (nonnull NMGLatLng *)invalid;
+
+/**
+ 위도와 경도가 `DBL_MAX`인 객체를 생성합니다.
+
+ @return NMGLatLng 객체.
+ */
++ (nonnull instancetype)latLng;
+
+/**
+ 위도와 경도로 객체를 생성합니다.
+
+ @param lat 위도.
+ @param lng 경도.
+ @return NMGLatLng 객체.
+ */
++ (nonnull instancetype)latLngWithLat:(double)lat lng:(double)lng;
+
+/**
+ `CLLocationCoordinate2D`로부터 객체를 생성합니다.
+
+ @param coordinate CLLocationCoordinate2D 객체.
+ @return NMGLatLng 객체.
+ */
++ (nonnull instancetype)latLngFromCoordinate:(CLLocationCoordinate2D)coordinate;
+
+/**
+ @return self.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+/**
+ 이 좌표의 `lng`를 [`NMG_LAT_LNG_MINIMUM_LONGITUDE`, `NMG_LAT_LNG_MAXIMUM_LONGITUDE`] 범위로 래핑한 좌표를
+ 반환합니다. `lng` 이미 해당 범위에 속해 있을 경우 새로운 객체가 만들어지지 않고 이 객체가
+ 반환됩니다.
+
+ @return 경도가 래핑된 좌표 객체.
+ */
+- (nonnull NMGLatLng *)wrap;
+
+/**
+ 다른 좌표와의 거리를 반환합니다.
+
+ @param other 거리를 잴 다른 좌표.
+ @return 좌표 간의 거리. 미터 단위.
+ */
+- (double)distanceTo:(nonnull NMGLatLng *)other __attribute__((warn_unused_result));
+
+/**
+ 이 좌표로부터 북쪽으로 `northMeter`미터, 동쪽으로 `eastMeter`미터만큼 떨어진 좌표를
+ 반환합니다.
+
+ @param northMeter 북쪽 방향 거리. 미터 단위.
+ @param eastMeter 동쪽 방향 거리. 미터 단위.
+ @return 좌표.
+ */
+- (nonnull NMGLatLng *)offset:(double)northMeter withEastMeter:(double)eastMeter __attribute__((warn_unused_result));
+
+@end
+
+static inline NMGLatLng * _Nonnull NMGLatLngMake(double lat, double lng) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGLatLng latLngWithLat:lat lng:lng];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLngBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLngBounds.h
new file mode 100644
index 00000000..f79bfad2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLngBounds.h
@@ -0,0 +1,157 @@
+//
+// NMGLatLngBounds.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 6..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGLatLng;
+
+/**
+ 남서쪽과 북동쪽 두 위경도 좌표로 이루어진
+ 최소 경계 사각형
+ 영역을 나타내는 클래스.
+ */
+NMG_EXPORT
+@interface NMGLatLngBounds : NSObject
+
+/**
+ 남서쪽 좌표.
+ */
+@property (nonatomic, nonnull) NMGLatLng *southWest;
+
+/**
+ 북동쪽 좌표.
+ */
+@property (nonatomic, nonnull) NMGLatLng *northEast;
+
+/**
+ 영역의 중심점 좌표.
+ */
+@property (nonatomic, readonly, nonnull) NMGLatLng *center;
+
+/**
+ 영역의 위도(세로) 폭. 도 단위.
+ */
+@property (nonatomic, readonly) double latSpan;
+
+/**
+ 영역의 경도(가로) 폭. 도 단위.
+ */
+@property (nonatomic, readonly) double lngSpan;
+
+/**
+ 최남단의 위도.
+ */
+@property (nonatomic, readonly) double southWestLat;
+
+/**
+ 최서단의 경도.
+ */
+@property (nonatomic, readonly) double southWestLng;
+
+/**
+ 최북단의 위도.
+ */
+@property (nonatomic, readonly) double northEastLat;
+
+/**
+ 최동단의 위도.
+ */
+@property (nonatomic, readonly) double northEastLng;
+
+/**
+ 영역을 배열로 변환합니다. 배열의 크기는 `2`이며, 각 원소는 순서대로 영역의 남서쪽, 북동쪽 좌표를
+ 나타냅니다.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *boundsLatLngs;
+
++ (nonnull instancetype)bounds;
+
+/**
+ `latLngs`의 좌표를 모두 포함하는 최소한의 `NMGLatLngBounds` 객체를 생성합니다.
+
+ @param latLngs 포함할 좌표들
+ @return `NMGLatLngBounds` 객체
+*/
++ (nonnull instancetype)latLngBoundsWithLatLngs:(nonnull NSArray *)latLngs;
+
+/**
+* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다.
+
+ @param southWest 남서쪽 좌표.
+ @param northEast 북동쪽 좌표.
+ @return `NMGLatLngBounds` 객체
+*/
++ (nonnull instancetype)latLngBoundsSouthWest:(nonnull NMGLatLng *)southWest northEast:(nonnull NMGLatLng *)northEast;
+
+/**
+* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다.
+
+ @param southWestLat 남서쪽 좌표의 위도
+ @param southWestLng 남서쪽 좌표의 경도
+ @param northEastLat 북동쪽 좌표의 위도
+ @param northEastLng 북동쪽 좌표의 경도
+ @return `NMGLatLngBounds` 객체
+*/
++ (nonnull instancetype)latLngBoundsWithSouthWestLat:(double)southWestLat southWestLng:(double)southWestLng northEastLat:(double)northEastLat northEastLng:(double)northEastLng;
+
+/**
+ 영역이 좌표를 포함하는지 여부를 반환합니다.
+
+ @param point 포함되는지 확인할 좌표.
+ @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)hasPoint:(nonnull NMGLatLng *)point;
+
+/**
+ 영역이 다른 영역을 포함하는지 여부를 반환합니다.
+
+ @param bounds 포함되는지 확인할 영역.
+ @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)hasBounds:(nonnull NMGLatLngBounds *)bounds;
+
+/**
+ 영역이 다른 영역과 교차하는지 여부를 반환합니다.
+
+ @param bounds 교차하는지 확인할 영역.
+ @return 교차할 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isIntersect:(nonnull NMGLatLngBounds *)bounds;
+
+/**
+ 영역과 다른 영역 간의 교차 영역을 반환합니다.
+
+ @param bounds 다른 영역.
+ @return 교차 영역. 두 영역이 교차하지 않을 경우 `nil`.
+ */
+- (nullable NMGLatLngBounds *)intersectionWithBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result));
+
+/**
+ `point`를 포함하도록 확장한 영역을 반환합니다. 영역이 이미 `point`를 포함하고 있을 경우
+ 새로운 객체가 만들어지지 않고 이 객체가 반환됩니다.
+
+ @param point 포함할 좌표.
+ @return 좌표가 포함된 영역.
+ */
+- (nonnull NMGLatLngBounds *)expandToPoint:(nonnull NMGLatLng *)point __attribute__((warn_unused_result));
+
+/**
+ 현재 영역과 다른 영역을 모두 포함하는 최소한의 영역을 구합니다.
+
+ @param bounds 다른 영역.
+ @return 두 영역을 모두 포함하는 영역.
+ */
+- (nonnull NMGLatLngBounds *)unionBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result));
+
+@end
+
+static inline NMGLatLngBounds * _Nonnull NMGLatLngBoundsMake(double southWestLat, double southWestLng, double northEastLat, double northEastLng) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGLatLngBounds latLngBoundsWithSouthWestLat:southWestLat southWestLng:southWestLng northEastLat:northEastLat northEastLng:northEastLng];
+}
+
+
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLineString.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLineString.h
new file mode 100644
index 00000000..066bacf3
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLineString.h
@@ -0,0 +1,50 @@
+//
+// NMGLineString.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 3..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGSegment;
+
+/**
+ 라인스트링을 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGLineString<__covariant PointType> : NSObject
+
+/**
+ 라인스트링을 구성하는 점의 배열.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *points;
+
+/**
+ 라인스트링을 구성하는 NMGSegment의 배열.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *segments;
+
+/**
+ 라인스트링이 리니어 링의 특성을 만족하는지 여부.
+
+ 첫 번째 점과 마지막 점이 같을 경우 `YES`입니다.
+ */
+@property (nonatomic, readonly) BOOL isRing;
+
++ (nonnull instancetype)lineString;
++ (nonnull instancetype)lineStringWithPoints:(nonnull NSArray *)points;
+- (nonnull instancetype)initWithPoints:(nonnull NSArray *)points;
+
+- (nullable PointType)pointAtIndex:(NSUInteger)index;
+- (nullable NMGSegment *)segmentAtIndex:(NSUInteger)index;
+
+- (void)addPoint:(nonnull PointType)point;
+- (void)insertPoint:(nonnull PointType)point atIndex:(NSUInteger)index;
+- (void)removePointAtIndex:(NSUInteger)index;
+- (void)removePoint:(nonnull PointType)point;
+
+- (void)convertRing;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGMultiPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGMultiPolygon.h
new file mode 100644
index 00000000..328a375a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGMultiPolygon.h
@@ -0,0 +1,29 @@
+//
+// NMGMultiPolygon.h
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 3. 9..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGPolygon<__covariant PointType>;
+
+/**
+ 지도상의 면을 표현하는 Polygon의 집합체.
+ */
+NMG_EXPORT
+@interface NMGMultiPolygon<__covariant PointType> : NSObject
+
+@property (nonatomic, readonly, nonnull) NSArray *> *polygons;
+
++ (nonnull NMGMultiPolygon *)multiPolygon;
++ (nonnull NMGMultiPolygon *)multiPolygonWithPolygons:(nonnull NSArray *> *)polygons;
+
+- (nonnull instancetype)initWithPolygons:(nonnull NSArray *> *)polygons;
+- (void)addPolygon:(nonnull NMGPolygon *)polygon;
+- (void)insertPolygon:(nonnull NMGPolygon *)polygon AtIndex:(NSInteger)index;
+- (void)removePolygonAtIndex:(NSInteger)index;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPoint.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPoint.h
new file mode 100644
index 00000000..8ce52251
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPoint.h
@@ -0,0 +1,37 @@
+//
+// NMGPoint.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 1. 11..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+/**
+ 평면 직교 좌표계상의 한 점을 나타내는 클래스.
+ */
+NMG_EXPORT
+@interface NMGPoint : NSObject
+
+@property (nonatomic) double x;
+@property (nonatomic) double y;
+
++ (nonnull instancetype)point;
++ (nonnull instancetype)pointWithX:(double)x y:(double)y;
+
+- (nonnull instancetype)initWithX:(double)x y:(double)y;
+
+/**
+ 다른 좌표와의 거리를 구합니다.
+
+ @param other 다른 좌표.
+ @return 거리. 미터 단위.
+ */
+- (double)distanceTo:(nonnull NMGPoint *)other;
+
+@end
+
+static inline NMGPoint * _Nonnull NMGPointMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGPoint pointWithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPolygon.h
new file mode 100644
index 00000000..d0fe7f0a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPolygon.h
@@ -0,0 +1,44 @@
+//
+// NMGPolygon.h
+// NMGeometryFramework
+//
+// Created by Kali on 2016. 10. 13..
+// Copyright © 2016년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGLineString<__covariant PointType>;
+
+/**
+ 폴리곤을 나타내는 클래스.
+ */
+NMG_EXPORT
+@interface NMGPolygon<__covariant PointType> : NSObject
+
+/**
+ 외곽선.
+ */
+@property (nonatomic, nonnull) NMGLineString *exteriorRing;
+
+/**
+ 내부 홀의 배열.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *> *interiorRings;
+
+/**
+ 내부 홀의 개수.
+ */
+@property (nonatomic, readonly) NSUInteger interiorRingCount;
+
++ (nonnull NMGPolygon *)polygon;
++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing;
++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings;
+
+- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing;
+- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings;
+- (void)addInteriorRing:(nonnull NMGLineString *)ring;
+- (void)removeInteriorRingAtIndex:(NSUInteger)index;
+
+@end
+
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGSegment.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGSegment.h
new file mode 100644
index 00000000..36fddd52
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGSegment.h
@@ -0,0 +1,32 @@
+//
+// NMGSegment.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 6..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import
+#import "NMGGeometry.h"
+
+/**
+ 두 점의 집합.
+ PointType에 따라 Point, LatLng로 동작합니다.
+ */
+NMG_EXPORT
+@interface NMGSegment<__covariant PointType> : NSObject
+
+/**
+ 시작점.
+ */
+@property (nonatomic, nullable) PointType from;
+/**
+ 끝점.
+ */
+@property (nonatomic, nullable) PointType to;
+
++ (nonnull instancetype)segment;
++ (nonnull instancetype)segmentFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint;
+- (nonnull instancetype)initWithFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGTm128.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGTm128.h
new file mode 100644
index 00000000..5a95fc1f
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGTm128.h
@@ -0,0 +1,94 @@
+#import "NMGGeometry.h"
+
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+/**
+ 커버리지 내 `x`의 최솟값.
+ */
+const static double NMG_TM128_MINIMUM_X = 30408.747066328477;
+
+/**
+ 커버리지 내 `y`의 최솟값.
+ */
+const static double NMG_TM128_MINIMUM_Y = 158674.67403835512;
+
+/**
+ 커버리지 내 `x`의 최댓값.
+ */
+const static double NMG_TM128_MAXIMUM_X = 749976.0946343569;
+
+/**
+ 커버리지 내 `y`의 최댓값.
+ */
+const static double NMG_TM128_MAXIMUM_Y = 643904.8888573726;
+
+/**
+ TM-128 좌표를 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGTm128 : NSObject
+
+/**
+ x 좌표.
+ */
+@property (nonatomic, readonly) double x;
+
+/**
+ y 좌표.
+ */
+@property (nonatomic, readonly) double y;
+
+/**
+ UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다.
+ southWest(33.96, 124.0)
+ northEast(38.33, 132.0)
+
+ @return NMGLatLngBounds 객체
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)tm128;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @param x 좌표
+ @param y 좌표
+ @return NMGTm128 객체
+ */
++ (nonnull instancetype)tm128WithX:(double)x y:(double)y;
+
+/**
+ 위경도 좌표를 UTM-K 좌표로 변환합니다.
+
+ @param latLng 위경도 좌표
+ @return NMGTm128 객체
+ */
++ (nonnull instancetype)tm128FromLatLng:(nonnull NMGLatLng *)latLng;
+
+/**
+ 좌표를 위경도 좌표로 변환합니다.
+
+ @return 변환된 위경도 좌표.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+@end
+
+static inline NMGTm128 * _Nonnull NMGTm128Make(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGTm128 tm128WithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtils.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtils.h
new file mode 100644
index 00000000..59d6f459
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtils.h
@@ -0,0 +1,69 @@
+//
+// NMGUtils.h
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 1. 10..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGPoint;
+@class NMGLatLng;
+@class NMGLineString;
+
+/**
+ 지오메트리와 관련된 유틸리티 기능을 제공하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGUtils : NSObject
+
+/**
+ `line`에 `point`가 포함되어 있는지 여부를 반환합니다.
+
+ @param point 확인할 점.
+ @param line 확인할 라인스트링.
+ @return 라인스트링이 점을 포함하고 있는지 여부.
+ */
++ (BOOL)isContainPoint:(nonnull NMGPoint *)point inLineString:(nonnull NMGLineString *)line;
+
+/**
+ 라인스트링 안에 위경도 좌표가 포함되어 있는지 확인합니다.
+
+ @param latLng 확인할 위경도 좌표.
+ @param line 확인할 라인스트링.
+ @return 라인스트링이 위경도 좌표을 포함하고 있는지 여부.
+ */
++ (BOOL)isContainLatLng:(nonnull NMGLatLng *)latLng inLineString:(nonnull NMGLineString *)line;
+
+/**
+ 라인스트링의 길이를 계산합니다.
+
+ @param line 라인스트링.
+ @return 라인스트링 길이.
+ */
++ (double)lengthForLineString:(nonnull NMGLineString *)line;
+
+/**
+ `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나
+ `max`보다 클 경우 값이 순환된다.
+
+ @param value 래핑할 값.
+ @param min 최솟값.
+ @param max 최댓값.
+ @return 래핑된 값.
+ */
++ (double)wrap:(double)value min:(double)min max:(double)max;
+
+/**
+ `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나
+ `max`보다 클 경우 값이 순환된다.
+
+ @param value 래핑할 값.
+ @param min 최솟값.
+ @param max 최댓값.
+ @return 래핑된 값.
+ */
++ (int)wrapi:(int)value min:(int)min max:(int)max;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtmk.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtmk.h
new file mode 100644
index 00000000..7b96f86c
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtmk.h
@@ -0,0 +1,94 @@
+#import "NMGGeometry.h"
+
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+/**
+ 커버리지 내 `x`의 최솟값.
+ */
+const static double NMG_UTMK_MINIMUM_X = 283038.5;
+
+/**
+ 커버리지 내 `y`의 최솟값.
+ */
+const static double NMG_UTMK_MINIMUM_Y = 1248041.6;
+
+/**
+ 커버리지 내 `x`의 최댓값.
+ */
+const static double NMG_UTMK_MAXIMUM_X = 1937760.8;
+
+/**
+ 커버리지 내 `y`의 최댓값.
+ */
+const static double NMG_UTMK_MAXIMUM_Y = 2619635;
+
+/**
+ UTMK 좌표를 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGUtmk : NSObject
+
+/**
+ x 좌표.
+ */
+@property (nonatomic, readonly) double x;
+
+/**
+ y 좌표.
+ */
+@property (nonatomic, readonly) double y;
+
+/**
+ UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다.
+ southWest(31.0, 120.0)
+ northEast(43.0, 139.0)
+
+ @return NMGLatLngBounds 객체
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)utmk;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @param x 좌표
+ @param y 좌표
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)utmkWithX:(double)x y:(double)y;
+
+/**
+ 위경도 좌표를 UTM-K 좌표로 변환합니다.
+
+ @param latLng 위경도 좌표
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)utmkFromLatLng:(nonnull NMGLatLng *)latLng;
+
+/**
+ 좌표를 위경도 좌표로 변환합니다.
+
+ @return 변환된 위경도 좌표.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+@end
+
+static inline NMGUtmk * _Nonnull NMGUtmkMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGUtmk utmkWithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h
new file mode 100644
index 00000000..b5acc81b
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h
@@ -0,0 +1,121 @@
+#import "NMGGeometry.h"
+#import "NMGConstants.h"
+
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+/**
+ 커버리지 내 `x` 및 `y`의 최솟값.
+ */
+const static double NMG_WEB_MERCATOR_MINIMUM_XY = -M_PI * NMG_EARTH_RADIUS;
+
+/**
+ 커버리지 내 `x` 및 `y`의 최댓값.
+ */
+const static double NMG_WEB_MERCATOR_MAXIMUM_XY = M_PI * NMG_EARTH_RADIUS;
+
+/**
+ 웹 메르카토르 좌표로 나타낼 수 있는 최소 위도.
+ */
+const static double NMG_WEB_MERCATOR_MINIMUM_LATITUDE = -85.05112877980659;
+
+/**
+ 웹 메르카토르 좌표로 나타낼 수 있는 최대 위도.
+ */
+const static double NMG_WEB_MERCATOR_MAXIMUM_LATITUDE = 85.05112877980659;
+
+/**
+ 웹 메르카토르 좌표를 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGWebMercatorCoord : NSObject
+
+/**
+ x 좌표.
+ */
+@property (nonatomic, readonly) double x;
+
+/**
+ y 좌표.
+ */
+@property (nonatomic, readonly) double y;
+
+/**
+ 웹 메르카토르 좌표로 나타낼 수 있는 커버리지 영역.
+
+ @return `NMGLatLngBounds` 객체.
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @return 웹 메르카토르 좌표.
+ */
++ (nonnull instancetype)webMercatorCoord;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @param x 좌표.
+ @param y 좌표.
+ @return 웹 메르카토르 좌표.
+ */
++ (nonnull instancetype)coordWithX:(double)x y:(double)y;
+
+/**
+ 위경도 좌표를 웹 메르카토르 좌표로 변환합니다.
+
+ @param latLng 위경도 좌표.
+ @return 웹 메르카토르 좌표.
+ */
++ (nonnull instancetype)coordFromLatLng:(nonnull NMGLatLng *)latLng;
+
+/**
+ 웹 메르카토르 좌표를 위경도 좌표로 변환합니다.
+
+ @return 위경도 좌표.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+/**
+ 다른 좌표와의 거리를 구합니다. `NMGWebMercatorCoord` 좌표는 메르카토르 도법을 사용하므로 오차가 클 수
+ 있습니다. 지리적으로 보다 정밀한 값이 필요한 경우 `LatLng#distanceTo(LatLng)`를 사용하십시오.
+
+ @param other 다른 좌표.
+ @return 거리. 미터 단위.
+ @see `NMGLatLng` `-distanceTo:(NMGLatLng *)`
+ */
+- (double)distanceTo:(nonnull NMGWebMercatorCoord *)other;
+
+/**
+ 다른 좌표와의 거리의 제곱을 구합니다. 거리 비교의 목적으로
+ `-distanceTo:(NMGWebMercatorCoord *)`에서 제곱근까지 구할 필요가 없을 때 사용하면 좋습니다.
+
+ @param other 다른 좌표.
+ @return 거리. 미터 단위.
+ */
+- (double)squareDistanceTo:(nonnull NMGWebMercatorCoord *)other;
+
+/**
+ 다른 좌표와의 각도를 구합니다. 다른 좌표가 현재 좌표의 정북 방향에 있을 경우 0
도이며, 시계 방향으로
+ 각도가 증가합니다.
+
+ @param other 다른 좌표.
+ @return 각도. 도 단위.
+ */
+- (double)bearingTo:(nonnull NMGWebMercatorCoord *)other;
+
+@end
+
+static inline NMGWebMercatorCoord * _Nonnull NMGWebMercatorCoordMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGWebMercatorCoord coordWithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMapsGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMapsGeometry.h
new file mode 100644
index 00000000..745ae894
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMapsGeometry.h
@@ -0,0 +1,32 @@
+//
+// NMapsGeometry.h
+// NMapsGeometry
+//
+// Created by Kali on 2016. 10. 13..
+// Copyright © 2016년 NAVER. All rights reserved.
+//
+
+#import
+
+//! Project version number for NMapsGeometryFramework.
+FOUNDATION_EXPORT double NMapsGeometryVersionNumber;
+
+//! Project version string for NMapsGeometryFramework.
+FOUNDATION_EXPORT const unsigned char NMapsGeometryVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import
+
+
+#import "NMGGeometry.h"
+#import "NMGSegment.h"
+#import "NMGBounds.h"
+#import "NMGLatLngBounds.h"
+#import "NMGPoint.h"
+#import "NMGLatLng.h"
+#import "NMGLineString.h"
+#import "NMGPolygon.h"
+#import "NMGMultiPolygon.h"
+#import "NMGUtils.h"
+#import "NMGUtmk.h"
+#import "NMGTm128.h"
+#import "NMGWebMercatorCoord.h"
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Info.plist b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Info.plist
new file mode 100644
index 00000000..e5c3700e
Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Info.plist differ
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Modules/module.modulemap b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Modules/module.modulemap
new file mode 100644
index 00000000..96a5eb33
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Modules/module.modulemap
@@ -0,0 +1,6 @@
+framework module NMapsGeometry {
+ umbrella header "NMapsGeometry.h"
+
+ export *
+ module * { export * }
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/NMapsGeometry b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/NMapsGeometry
new file mode 100755
index 00000000..316621b5
Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/NMapsGeometry differ
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGBounds.h
new file mode 100644
index 00000000..93f99b1a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGBounds.h
@@ -0,0 +1,48 @@
+//
+// NMGBounds.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 6..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGPoint;
+
+/**
+ 지도에 보여지는 사각형 영역을 정의한 Bounds.
+ NMGBounds는 평면직교 좌표계에 대한 클래스입니다.
+ */
+NMG_EXPORT
+@interface NMGBounds : NSObject
+
+@property (nonatomic, nonnull) NMGPoint *min;
+@property (nonatomic, nonnull) NMGPoint *max;
+
+@property (nonatomic, readonly, nonnull) NMGPoint *center;
+@property (nonatomic, readonly) double width;
+@property (nonatomic, readonly) double height;
+
+@property (nonatomic, readonly) double minX;
+@property (nonatomic, readonly) double minY;
+@property (nonatomic, readonly) double maxX;
+@property (nonatomic, readonly) double maxY;
+
++ (nonnull instancetype)bounds;
++ (nonnull instancetype)boundsWithMinX:(double)minX minY:(double)minY maxX:(double)maxX maxY:(double)maxY;
++ (nonnull instancetype)boundsWithMinX:(double)x minY:(double)y width:(double)width height:(double)height;
++ (nonnull instancetype)boundsWithMin:(nonnull NMGPoint *)min max:(nonnull NMGPoint *)max;
+
+- (BOOL)hasPoint:(nonnull NMGPoint *)point;
+- (BOOL)hasBounds:(nonnull NMGBounds *)bounds;
+- (BOOL)isIntersect:(nonnull NMGBounds *)bounds;
+- (nullable NMGBounds *)intersectionWithBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result));
+- (nonnull NMGBounds *)expandToPoint:(nonnull NMGPoint *)point __attribute__((warn_unused_result));
+- (nonnull NMGBounds *)unionBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result));
+
+@end
+
+static inline NMGBounds * _Nonnull NMGBoundsMake(double minX, double minY, double maxX, double maxY) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGBounds boundsWithMinX:minX minY:minY maxX:maxX maxY:maxY];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGConstants.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGConstants.h
new file mode 100644
index 00000000..1457de86
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGConstants.h
@@ -0,0 +1,16 @@
+#import "NMGGeometry.h"
+
+#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI))
+#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
+
+static const double NaN = 0.0 / 0.0;
+static const double POSITIVE_INFINITY = 1.0 / 0.0;
+static const double NEGATIVE_INFINITY = -1.0 / 0.0;
+
+static const double HALFPI = M_PI / 2;
+static const double TWOPI = M_PI * 2;
+
+/**
+ 지구의 적도 반경. 미터 단위.
+ */
+const static double NMG_EARTH_RADIUS = 6378137;
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGGeometry.h
new file mode 100644
index 00000000..3276cd62
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGGeometry.h
@@ -0,0 +1,66 @@
+//
+// NMGGeometry
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 1. 10..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import
+
+#define NMG_EXPORT __attribute__((visibility ("default")))
+
+#pragma mark NMGGeometry Protocol
+
+@class NMGLatLng;
+@protocol NMGBoundable;
+
+@protocol NMGGeometry
+
+@property (nonatomic, readonly) BOOL isEmpty;
+@property (nonatomic, readonly) BOOL isValid;
+@property (nonatomic, readonly, nonnull, copy) NSString *description;
+
+@optional
+@property (nonatomic, readonly, nonnull) id bounds;
+@end
+
+@protocol NMGPointable
+@optional
+- (nonnull NMGLatLng *)toLatLng;
+- (BOOL)isWithinCoverage;
+
+@end
+
+#pragma mark - NMGMultiPointable Protocol
+
+@protocol NMGMultiPointable
+
+@required
+@property (nonatomic, readonly, nonnull) NSArray *points;
+@property (nonatomic, readonly) NSUInteger count;
+- (void)addPoint:(nonnull id)point;
+- (nullable id)pointAtIndex:(NSUInteger)index;
+
+@optional
+- (void)insertPoint:(nonnull id)point atIndex:(NSUInteger)index;
+- (void)removePointAtIndex:(NSUInteger)index;
+- (void)removePoint:(nonnull id)point;
+
+- (void)addCoordinate:(CLLocationCoordinate2D)coordinate;
+- (void)insertCoordinate:(CLLocationCoordinate2D)coordinate atIndex:(NSUInteger)index;
+
+@end
+
+#pragma mark - NMGBoundable Protocol
+
+@protocol NMGBoundable
+
+- (BOOL)hasPoint:(nonnull id)point;
+- (BOOL)hasBounds:(nonnull id)bounds;
+- (BOOL)isIntersect:(nonnull id)bounds;
+- (nullable id)intersectionWithBounds:(nonnull id)bounds __attribute__((warn_unused_result));
+- (nonnull id)expandToPoint:(nonnull id)point __attribute__((warn_unused_result));
+- (nonnull id)unionBounds:(nonnull id)bounds __attribute__((warn_unused_result));
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLng.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLng.h
new file mode 100644
index 00000000..d149b97a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLng.h
@@ -0,0 +1,132 @@
+//
+// NMGLatLng.h
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 1. 10..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGLatLngBounds;
+@class NMGXyz;
+
+/**
+ 최소 위도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MINIMUM_LATITUDE = -90;
+
+/**
+ 최대 위도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MAXIMUM_LATITUDE = 90;
+
+/**
+ 최소 경도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MINIMUM_LONGITUDE = -180;
+
+/**
+ 최대 경도. 도 단위.
+ */
+const static double NMG_LAT_LNG_MAXIMUM_LONGITUDE = 180;
+
+/**
+ 위경도 좌표를 나타내는 클래스.
+
+ `CLLocationCoordinate2D`과 달리 위도와 경도를 `double`형으로 표현합니다.
+ */
+NMG_EXPORT
+@interface NMGLatLng : NSObject
+
+/**
+ 위도. 도 단위.
+ */
+@property (nonatomic) double lat;
+
+/**
+ 경도. 도 단위.
+ */
+@property (nonatomic) double lng;
+
+/**
+ 위경도 좌표로 나타낼 수 있는 커버리지 영역. 전 세계
+
+ @return `NMGLatLngBounds` 객체.
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ * 유효하지 않은(`isValid`가 `NO`인) 좌표를 나타내는 상수.
+ */
++ (nonnull NMGLatLng *)invalid;
+
+/**
+ 위도와 경도가 `DBL_MAX`인 객체를 생성합니다.
+
+ @return NMGLatLng 객체.
+ */
++ (nonnull instancetype)latLng;
+
+/**
+ 위도와 경도로 객체를 생성합니다.
+
+ @param lat 위도.
+ @param lng 경도.
+ @return NMGLatLng 객체.
+ */
++ (nonnull instancetype)latLngWithLat:(double)lat lng:(double)lng;
+
+/**
+ `CLLocationCoordinate2D`로부터 객체를 생성합니다.
+
+ @param coordinate CLLocationCoordinate2D 객체.
+ @return NMGLatLng 객체.
+ */
++ (nonnull instancetype)latLngFromCoordinate:(CLLocationCoordinate2D)coordinate;
+
+/**
+ @return self.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+/**
+ 이 좌표의 `lng`를 [`NMG_LAT_LNG_MINIMUM_LONGITUDE`, `NMG_LAT_LNG_MAXIMUM_LONGITUDE`] 범위로 래핑한 좌표를
+ 반환합니다. `lng` 이미 해당 범위에 속해 있을 경우 새로운 객체가 만들어지지 않고 이 객체가
+ 반환됩니다.
+
+ @return 경도가 래핑된 좌표 객체.
+ */
+- (nonnull NMGLatLng *)wrap;
+
+/**
+ 다른 좌표와의 거리를 반환합니다.
+
+ @param other 거리를 잴 다른 좌표.
+ @return 좌표 간의 거리. 미터 단위.
+ */
+- (double)distanceTo:(nonnull NMGLatLng *)other __attribute__((warn_unused_result));
+
+/**
+ 이 좌표로부터 북쪽으로 `northMeter`미터, 동쪽으로 `eastMeter`미터만큼 떨어진 좌표를
+ 반환합니다.
+
+ @param northMeter 북쪽 방향 거리. 미터 단위.
+ @param eastMeter 동쪽 방향 거리. 미터 단위.
+ @return 좌표.
+ */
+- (nonnull NMGLatLng *)offset:(double)northMeter withEastMeter:(double)eastMeter __attribute__((warn_unused_result));
+
+@end
+
+static inline NMGLatLng * _Nonnull NMGLatLngMake(double lat, double lng) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGLatLng latLngWithLat:lat lng:lng];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLngBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLngBounds.h
new file mode 100644
index 00000000..f79bfad2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLngBounds.h
@@ -0,0 +1,157 @@
+//
+// NMGLatLngBounds.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 6..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGLatLng;
+
+/**
+ 남서쪽과 북동쪽 두 위경도 좌표로 이루어진
+ 최소 경계 사각형
+ 영역을 나타내는 클래스.
+ */
+NMG_EXPORT
+@interface NMGLatLngBounds : NSObject
+
+/**
+ 남서쪽 좌표.
+ */
+@property (nonatomic, nonnull) NMGLatLng *southWest;
+
+/**
+ 북동쪽 좌표.
+ */
+@property (nonatomic, nonnull) NMGLatLng *northEast;
+
+/**
+ 영역의 중심점 좌표.
+ */
+@property (nonatomic, readonly, nonnull) NMGLatLng *center;
+
+/**
+ 영역의 위도(세로) 폭. 도 단위.
+ */
+@property (nonatomic, readonly) double latSpan;
+
+/**
+ 영역의 경도(가로) 폭. 도 단위.
+ */
+@property (nonatomic, readonly) double lngSpan;
+
+/**
+ 최남단의 위도.
+ */
+@property (nonatomic, readonly) double southWestLat;
+
+/**
+ 최서단의 경도.
+ */
+@property (nonatomic, readonly) double southWestLng;
+
+/**
+ 최북단의 위도.
+ */
+@property (nonatomic, readonly) double northEastLat;
+
+/**
+ 최동단의 위도.
+ */
+@property (nonatomic, readonly) double northEastLng;
+
+/**
+ 영역을 배열로 변환합니다. 배열의 크기는 `2`이며, 각 원소는 순서대로 영역의 남서쪽, 북동쪽 좌표를
+ 나타냅니다.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *boundsLatLngs;
+
++ (nonnull instancetype)bounds;
+
+/**
+ `latLngs`의 좌표를 모두 포함하는 최소한의 `NMGLatLngBounds` 객체를 생성합니다.
+
+ @param latLngs 포함할 좌표들
+ @return `NMGLatLngBounds` 객체
+*/
++ (nonnull instancetype)latLngBoundsWithLatLngs:(nonnull NSArray *)latLngs;
+
+/**
+* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다.
+
+ @param southWest 남서쪽 좌표.
+ @param northEast 북동쪽 좌표.
+ @return `NMGLatLngBounds` 객체
+*/
++ (nonnull instancetype)latLngBoundsSouthWest:(nonnull NMGLatLng *)southWest northEast:(nonnull NMGLatLng *)northEast;
+
+/**
+* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다.
+
+ @param southWestLat 남서쪽 좌표의 위도
+ @param southWestLng 남서쪽 좌표의 경도
+ @param northEastLat 북동쪽 좌표의 위도
+ @param northEastLng 북동쪽 좌표의 경도
+ @return `NMGLatLngBounds` 객체
+*/
++ (nonnull instancetype)latLngBoundsWithSouthWestLat:(double)southWestLat southWestLng:(double)southWestLng northEastLat:(double)northEastLat northEastLng:(double)northEastLng;
+
+/**
+ 영역이 좌표를 포함하는지 여부를 반환합니다.
+
+ @param point 포함되는지 확인할 좌표.
+ @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)hasPoint:(nonnull NMGLatLng *)point;
+
+/**
+ 영역이 다른 영역을 포함하는지 여부를 반환합니다.
+
+ @param bounds 포함되는지 확인할 영역.
+ @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)hasBounds:(nonnull NMGLatLngBounds *)bounds;
+
+/**
+ 영역이 다른 영역과 교차하는지 여부를 반환합니다.
+
+ @param bounds 교차하는지 확인할 영역.
+ @return 교차할 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isIntersect:(nonnull NMGLatLngBounds *)bounds;
+
+/**
+ 영역과 다른 영역 간의 교차 영역을 반환합니다.
+
+ @param bounds 다른 영역.
+ @return 교차 영역. 두 영역이 교차하지 않을 경우 `nil`.
+ */
+- (nullable NMGLatLngBounds *)intersectionWithBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result));
+
+/**
+ `point`를 포함하도록 확장한 영역을 반환합니다. 영역이 이미 `point`를 포함하고 있을 경우
+ 새로운 객체가 만들어지지 않고 이 객체가 반환됩니다.
+
+ @param point 포함할 좌표.
+ @return 좌표가 포함된 영역.
+ */
+- (nonnull NMGLatLngBounds *)expandToPoint:(nonnull NMGLatLng *)point __attribute__((warn_unused_result));
+
+/**
+ 현재 영역과 다른 영역을 모두 포함하는 최소한의 영역을 구합니다.
+
+ @param bounds 다른 영역.
+ @return 두 영역을 모두 포함하는 영역.
+ */
+- (nonnull NMGLatLngBounds *)unionBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result));
+
+@end
+
+static inline NMGLatLngBounds * _Nonnull NMGLatLngBoundsMake(double southWestLat, double southWestLng, double northEastLat, double northEastLng) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGLatLngBounds latLngBoundsWithSouthWestLat:southWestLat southWestLng:southWestLng northEastLat:northEastLat northEastLng:northEastLng];
+}
+
+
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLineString.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLineString.h
new file mode 100644
index 00000000..066bacf3
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLineString.h
@@ -0,0 +1,50 @@
+//
+// NMGLineString.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 3..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGSegment;
+
+/**
+ 라인스트링을 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGLineString<__covariant PointType> : NSObject
+
+/**
+ 라인스트링을 구성하는 점의 배열.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *points;
+
+/**
+ 라인스트링을 구성하는 NMGSegment의 배열.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *segments;
+
+/**
+ 라인스트링이 리니어 링의 특성을 만족하는지 여부.
+
+ 첫 번째 점과 마지막 점이 같을 경우 `YES`입니다.
+ */
+@property (nonatomic, readonly) BOOL isRing;
+
++ (nonnull instancetype)lineString;
++ (nonnull instancetype)lineStringWithPoints:(nonnull NSArray *)points;
+- (nonnull instancetype)initWithPoints:(nonnull NSArray *)points;
+
+- (nullable PointType)pointAtIndex:(NSUInteger)index;
+- (nullable NMGSegment *)segmentAtIndex:(NSUInteger)index;
+
+- (void)addPoint:(nonnull PointType)point;
+- (void)insertPoint:(nonnull PointType)point atIndex:(NSUInteger)index;
+- (void)removePointAtIndex:(NSUInteger)index;
+- (void)removePoint:(nonnull PointType)point;
+
+- (void)convertRing;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGMultiPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGMultiPolygon.h
new file mode 100644
index 00000000..328a375a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGMultiPolygon.h
@@ -0,0 +1,29 @@
+//
+// NMGMultiPolygon.h
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 3. 9..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGPolygon<__covariant PointType>;
+
+/**
+ 지도상의 면을 표현하는 Polygon의 집합체.
+ */
+NMG_EXPORT
+@interface NMGMultiPolygon<__covariant PointType> : NSObject
+
+@property (nonatomic, readonly, nonnull) NSArray *> *polygons;
+
++ (nonnull NMGMultiPolygon *)multiPolygon;
++ (nonnull NMGMultiPolygon *)multiPolygonWithPolygons:(nonnull NSArray *> *)polygons;
+
+- (nonnull instancetype)initWithPolygons:(nonnull NSArray *> *)polygons;
+- (void)addPolygon:(nonnull NMGPolygon *)polygon;
+- (void)insertPolygon:(nonnull NMGPolygon *)polygon AtIndex:(NSInteger)index;
+- (void)removePolygonAtIndex:(NSInteger)index;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPoint.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPoint.h
new file mode 100644
index 00000000..8ce52251
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPoint.h
@@ -0,0 +1,37 @@
+//
+// NMGPoint.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 1. 11..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+/**
+ 평면 직교 좌표계상의 한 점을 나타내는 클래스.
+ */
+NMG_EXPORT
+@interface NMGPoint : NSObject
+
+@property (nonatomic) double x;
+@property (nonatomic) double y;
+
++ (nonnull instancetype)point;
++ (nonnull instancetype)pointWithX:(double)x y:(double)y;
+
+- (nonnull instancetype)initWithX:(double)x y:(double)y;
+
+/**
+ 다른 좌표와의 거리를 구합니다.
+
+ @param other 다른 좌표.
+ @return 거리. 미터 단위.
+ */
+- (double)distanceTo:(nonnull NMGPoint *)other;
+
+@end
+
+static inline NMGPoint * _Nonnull NMGPointMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGPoint pointWithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPolygon.h
new file mode 100644
index 00000000..d0fe7f0a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPolygon.h
@@ -0,0 +1,44 @@
+//
+// NMGPolygon.h
+// NMGeometryFramework
+//
+// Created by Kali on 2016. 10. 13..
+// Copyright © 2016년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGLineString<__covariant PointType>;
+
+/**
+ 폴리곤을 나타내는 클래스.
+ */
+NMG_EXPORT
+@interface NMGPolygon<__covariant PointType> : NSObject
+
+/**
+ 외곽선.
+ */
+@property (nonatomic, nonnull) NMGLineString *exteriorRing;
+
+/**
+ 내부 홀의 배열.
+ */
+@property (nonatomic, readonly, nonnull) NSArray *> *interiorRings;
+
+/**
+ 내부 홀의 개수.
+ */
+@property (nonatomic, readonly) NSUInteger interiorRingCount;
+
++ (nonnull NMGPolygon *)polygon;
++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing;
++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings;
+
+- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing;
+- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings;
+- (void)addInteriorRing:(nonnull NMGLineString *)ring;
+- (void)removeInteriorRingAtIndex:(NSUInteger)index;
+
+@end
+
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGSegment.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGSegment.h
new file mode 100644
index 00000000..36fddd52
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGSegment.h
@@ -0,0 +1,32 @@
+//
+// NMGSegment.h
+// NMGeometryFramework
+//
+// Created by mrtajo on 2017. 2. 6..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import
+#import "NMGGeometry.h"
+
+/**
+ 두 점의 집합.
+ PointType에 따라 Point, LatLng로 동작합니다.
+ */
+NMG_EXPORT
+@interface NMGSegment<__covariant PointType> : NSObject
+
+/**
+ 시작점.
+ */
+@property (nonatomic, nullable) PointType from;
+/**
+ 끝점.
+ */
+@property (nonatomic, nullable) PointType to;
+
++ (nonnull instancetype)segment;
++ (nonnull instancetype)segmentFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint;
+- (nonnull instancetype)initWithFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGTm128.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGTm128.h
new file mode 100644
index 00000000..5a95fc1f
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGTm128.h
@@ -0,0 +1,94 @@
+#import "NMGGeometry.h"
+
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+/**
+ 커버리지 내 `x`의 최솟값.
+ */
+const static double NMG_TM128_MINIMUM_X = 30408.747066328477;
+
+/**
+ 커버리지 내 `y`의 최솟값.
+ */
+const static double NMG_TM128_MINIMUM_Y = 158674.67403835512;
+
+/**
+ 커버리지 내 `x`의 최댓값.
+ */
+const static double NMG_TM128_MAXIMUM_X = 749976.0946343569;
+
+/**
+ 커버리지 내 `y`의 최댓값.
+ */
+const static double NMG_TM128_MAXIMUM_Y = 643904.8888573726;
+
+/**
+ TM-128 좌표를 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGTm128 : NSObject
+
+/**
+ x 좌표.
+ */
+@property (nonatomic, readonly) double x;
+
+/**
+ y 좌표.
+ */
+@property (nonatomic, readonly) double y;
+
+/**
+ UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다.
+ southWest(33.96, 124.0)
+ northEast(38.33, 132.0)
+
+ @return NMGLatLngBounds 객체
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)tm128;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @param x 좌표
+ @param y 좌표
+ @return NMGTm128 객체
+ */
++ (nonnull instancetype)tm128WithX:(double)x y:(double)y;
+
+/**
+ 위경도 좌표를 UTM-K 좌표로 변환합니다.
+
+ @param latLng 위경도 좌표
+ @return NMGTm128 객체
+ */
++ (nonnull instancetype)tm128FromLatLng:(nonnull NMGLatLng *)latLng;
+
+/**
+ 좌표를 위경도 좌표로 변환합니다.
+
+ @return 변환된 위경도 좌표.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+@end
+
+static inline NMGTm128 * _Nonnull NMGTm128Make(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGTm128 tm128WithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtils.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtils.h
new file mode 100644
index 00000000..59d6f459
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtils.h
@@ -0,0 +1,69 @@
+//
+// NMGUtils.h
+// NMGeometryFramework
+//
+// Created by Won-Young Son on 2017. 1. 10..
+// Copyright © 2017년 NAVER. All rights reserved.
+//
+
+#import "NMGGeometry.h"
+
+@class NMGPoint;
+@class NMGLatLng;
+@class NMGLineString;
+
+/**
+ 지오메트리와 관련된 유틸리티 기능을 제공하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGUtils : NSObject
+
+/**
+ `line`에 `point`가 포함되어 있는지 여부를 반환합니다.
+
+ @param point 확인할 점.
+ @param line 확인할 라인스트링.
+ @return 라인스트링이 점을 포함하고 있는지 여부.
+ */
++ (BOOL)isContainPoint:(nonnull NMGPoint *)point inLineString:(nonnull NMGLineString *)line;
+
+/**
+ 라인스트링 안에 위경도 좌표가 포함되어 있는지 확인합니다.
+
+ @param latLng 확인할 위경도 좌표.
+ @param line 확인할 라인스트링.
+ @return 라인스트링이 위경도 좌표을 포함하고 있는지 여부.
+ */
++ (BOOL)isContainLatLng:(nonnull NMGLatLng *)latLng inLineString:(nonnull NMGLineString *)line;
+
+/**
+ 라인스트링의 길이를 계산합니다.
+
+ @param line 라인스트링.
+ @return 라인스트링 길이.
+ */
++ (double)lengthForLineString:(nonnull NMGLineString *)line;
+
+/**
+ `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나
+ `max`보다 클 경우 값이 순환된다.
+
+ @param value 래핑할 값.
+ @param min 최솟값.
+ @param max 최댓값.
+ @return 래핑된 값.
+ */
++ (double)wrap:(double)value min:(double)min max:(double)max;
+
+/**
+ `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나
+ `max`보다 클 경우 값이 순환된다.
+
+ @param value 래핑할 값.
+ @param min 최솟값.
+ @param max 최댓값.
+ @return 래핑된 값.
+ */
++ (int)wrapi:(int)value min:(int)min max:(int)max;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtmk.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtmk.h
new file mode 100644
index 00000000..7b96f86c
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtmk.h
@@ -0,0 +1,94 @@
+#import "NMGGeometry.h"
+
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+/**
+ 커버리지 내 `x`의 최솟값.
+ */
+const static double NMG_UTMK_MINIMUM_X = 283038.5;
+
+/**
+ 커버리지 내 `y`의 최솟값.
+ */
+const static double NMG_UTMK_MINIMUM_Y = 1248041.6;
+
+/**
+ 커버리지 내 `x`의 최댓값.
+ */
+const static double NMG_UTMK_MAXIMUM_X = 1937760.8;
+
+/**
+ 커버리지 내 `y`의 최댓값.
+ */
+const static double NMG_UTMK_MAXIMUM_Y = 2619635;
+
+/**
+ UTMK 좌표를 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGUtmk : NSObject
+
+/**
+ x 좌표.
+ */
+@property (nonatomic, readonly) double x;
+
+/**
+ y 좌표.
+ */
+@property (nonatomic, readonly) double y;
+
+/**
+ UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다.
+ southWest(31.0, 120.0)
+ northEast(43.0, 139.0)
+
+ @return NMGLatLngBounds 객체
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)utmk;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @param x 좌표
+ @param y 좌표
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)utmkWithX:(double)x y:(double)y;
+
+/**
+ 위경도 좌표를 UTM-K 좌표로 변환합니다.
+
+ @param latLng 위경도 좌표
+ @return NMGUtmk 객체
+ */
++ (nonnull instancetype)utmkFromLatLng:(nonnull NMGLatLng *)latLng;
+
+/**
+ 좌표를 위경도 좌표로 변환합니다.
+
+ @return 변환된 위경도 좌표.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+@end
+
+static inline NMGUtmk * _Nonnull NMGUtmkMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGUtmk utmkWithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h
new file mode 100644
index 00000000..b5acc81b
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h
@@ -0,0 +1,121 @@
+#import "NMGGeometry.h"
+#import "NMGConstants.h"
+
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+/**
+ 커버리지 내 `x` 및 `y`의 최솟값.
+ */
+const static double NMG_WEB_MERCATOR_MINIMUM_XY = -M_PI * NMG_EARTH_RADIUS;
+
+/**
+ 커버리지 내 `x` 및 `y`의 최댓값.
+ */
+const static double NMG_WEB_MERCATOR_MAXIMUM_XY = M_PI * NMG_EARTH_RADIUS;
+
+/**
+ 웹 메르카토르 좌표로 나타낼 수 있는 최소 위도.
+ */
+const static double NMG_WEB_MERCATOR_MINIMUM_LATITUDE = -85.05112877980659;
+
+/**
+ 웹 메르카토르 좌표로 나타낼 수 있는 최대 위도.
+ */
+const static double NMG_WEB_MERCATOR_MAXIMUM_LATITUDE = 85.05112877980659;
+
+/**
+ 웹 메르카토르 좌표를 표현하는 클래스.
+ */
+NMG_EXPORT
+@interface NMGWebMercatorCoord : NSObject
+
+/**
+ x 좌표.
+ */
+@property (nonatomic, readonly) double x;
+
+/**
+ y 좌표.
+ */
+@property (nonatomic, readonly) double y;
+
+/**
+ 웹 메르카토르 좌표로 나타낼 수 있는 커버리지 영역.
+
+ @return `NMGLatLngBounds` 객체.
+ */
++ (nonnull NMGLatLngBounds *)coverage;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @return 웹 메르카토르 좌표.
+ */
++ (nonnull instancetype)webMercatorCoord;
+
+/**
+ 지정한 위치에 대한 좌표를 생성합니다.
+
+ @param x 좌표.
+ @param y 좌표.
+ @return 웹 메르카토르 좌표.
+ */
++ (nonnull instancetype)coordWithX:(double)x y:(double)y;
+
+/**
+ 위경도 좌표를 웹 메르카토르 좌표로 변환합니다.
+
+ @param latLng 위경도 좌표.
+ @return 웹 메르카토르 좌표.
+ */
++ (nonnull instancetype)coordFromLatLng:(nonnull NMGLatLng *)latLng;
+
+/**
+ 웹 메르카토르 좌표를 위경도 좌표로 변환합니다.
+
+ @return 위경도 좌표.
+ */
+- (nonnull NMGLatLng *)toLatLng;
+
+/**
+ 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지
+ 않습니다.
+
+ @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isWithinCoverage;
+
+/**
+ 다른 좌표와의 거리를 구합니다. `NMGWebMercatorCoord` 좌표는 메르카토르 도법을 사용하므로 오차가 클 수
+ 있습니다. 지리적으로 보다 정밀한 값이 필요한 경우 `LatLng#distanceTo(LatLng)`를 사용하십시오.
+
+ @param other 다른 좌표.
+ @return 거리. 미터 단위.
+ @see `NMGLatLng` `-distanceTo:(NMGLatLng *)`
+ */
+- (double)distanceTo:(nonnull NMGWebMercatorCoord *)other;
+
+/**
+ 다른 좌표와의 거리의 제곱을 구합니다. 거리 비교의 목적으로
+ `-distanceTo:(NMGWebMercatorCoord *)`에서 제곱근까지 구할 필요가 없을 때 사용하면 좋습니다.
+
+ @param other 다른 좌표.
+ @return 거리. 미터 단위.
+ */
+- (double)squareDistanceTo:(nonnull NMGWebMercatorCoord *)other;
+
+/**
+ 다른 좌표와의 각도를 구합니다. 다른 좌표가 현재 좌표의 정북 방향에 있을 경우 0
도이며, 시계 방향으로
+ 각도가 증가합니다.
+
+ @param other 다른 좌표.
+ @return 각도. 도 단위.
+ */
+- (double)bearingTo:(nonnull NMGWebMercatorCoord *)other;
+
+@end
+
+static inline NMGWebMercatorCoord * _Nonnull NMGWebMercatorCoordMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") {
+ return [NMGWebMercatorCoord coordWithX:x y:y];
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMapsGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMapsGeometry.h
new file mode 100644
index 00000000..745ae894
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMapsGeometry.h
@@ -0,0 +1,32 @@
+//
+// NMapsGeometry.h
+// NMapsGeometry
+//
+// Created by Kali on 2016. 10. 13..
+// Copyright © 2016년 NAVER. All rights reserved.
+//
+
+#import
+
+//! Project version number for NMapsGeometryFramework.
+FOUNDATION_EXPORT double NMapsGeometryVersionNumber;
+
+//! Project version string for NMapsGeometryFramework.
+FOUNDATION_EXPORT const unsigned char NMapsGeometryVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import
+
+
+#import "NMGGeometry.h"
+#import "NMGSegment.h"
+#import "NMGBounds.h"
+#import "NMGLatLngBounds.h"
+#import "NMGPoint.h"
+#import "NMGLatLng.h"
+#import "NMGLineString.h"
+#import "NMGPolygon.h"
+#import "NMGMultiPolygon.h"
+#import "NMGUtils.h"
+#import "NMGUtmk.h"
+#import "NMGTm128.h"
+#import "NMGWebMercatorCoord.h"
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Info.plist b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Info.plist
new file mode 100644
index 00000000..7b2da924
Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Info.plist differ
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Modules/module.modulemap b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Modules/module.modulemap
new file mode 100644
index 00000000..96a5eb33
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Modules/module.modulemap
@@ -0,0 +1,6 @@
+framework module NMapsGeometry {
+ umbrella header "NMapsGeometry.h"
+
+ export *
+ module * { export * }
+}
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/NMapsGeometry b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/NMapsGeometry
new file mode 100755
index 00000000..f85fa9c9
Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/NMapsGeometry differ
diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/_CodeSignature/CodeResources b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/_CodeSignature/CodeResources
new file mode 100644
index 00000000..b299f902
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/_CodeSignature/CodeResources
@@ -0,0 +1,342 @@
+
+
+
+
+ files
+
+ Headers/NMGBounds.h
+
+ MAEqEYoPW7WDQ5vZypJ64jEfEz0=
+
+ Headers/NMGConstants.h
+
+ KtO7mulC+p0zvDlxujwyc1rxPOY=
+
+ Headers/NMGGeometry.h
+
+ C3N7SI2L1lmUzIXPydYs58/v8Dk=
+
+ Headers/NMGLatLng.h
+
+ U++Yq0Cyq8OuceraJbhBJf+qje4=
+
+ Headers/NMGLatLngBounds.h
+
+ UdcC3iaWS+DIeS6zCrpCVWGDkmQ=
+
+ Headers/NMGLineString.h
+
+ HgIjm//jJma+arWa98nQt+YFYRU=
+
+ Headers/NMGMultiPolygon.h
+
+ 38p0XaC8qumTRHEFr5BY9qCYTWA=
+
+ Headers/NMGPoint.h
+
+ ll3MvHhuuOu7ZzXRb9RIIAUZ9Es=
+
+ Headers/NMGPolygon.h
+
+ uKP/+yQgJvxC4auFCTRYB/SHQW8=
+
+ Headers/NMGSegment.h
+
+ FO0UBIEDEe+GHPOkqfwemeCovdk=
+
+ Headers/NMGTm128.h
+
+ M+mGhF5kW/CYzMZ72LSUh57llw4=
+
+ Headers/NMGUtils.h
+
+ 1rerJrO3yS795yz3veeb+KPUrKU=
+
+ Headers/NMGUtmk.h
+
+ GUDo3psJeZNg5qcZRB9cReyABLY=
+
+ Headers/NMGWebMercatorCoord.h
+
+ Ih/WDvdEwiwiKBTP+pwgDtzL0/0=
+
+ Headers/NMapsGeometry.h
+
+ vKEoyoa3PoDXOhmPgAbgAYw2W/U=
+
+ Info.plist
+
+ qidTtwO/IWWZXkXxN/OtenPSXE8=
+
+ Modules/module.modulemap
+
+ hL2p0qf0W2W9ZCFpUFyhKF8oIFg=
+
+
+ files2
+
+ Headers/NMGBounds.h
+
+ hash
+
+ MAEqEYoPW7WDQ5vZypJ64jEfEz0=
+
+ hash2
+
+ u3LcEh0kjeTIkVhliPwJDWpD5hoqzansPObatSnqQM8=
+
+
+ Headers/NMGConstants.h
+
+ hash
+
+ KtO7mulC+p0zvDlxujwyc1rxPOY=
+
+ hash2
+
+ MqZNayZLmh/QMSFnX/TC2/delzrsZ6e1nJhgfBDIG9w=
+
+
+ Headers/NMGGeometry.h
+
+ hash
+
+ C3N7SI2L1lmUzIXPydYs58/v8Dk=
+
+ hash2
+
+ 7gQhyIsHbMyoEt5QZD7Hnk6YR8YW4GXvodE2hS5ExU8=
+
+
+ Headers/NMGLatLng.h
+
+ hash
+
+ U++Yq0Cyq8OuceraJbhBJf+qje4=
+
+ hash2
+
+ 6tc1IkunsZPnNhjS7I3SfE7D0uI5TriSyCKYVe3dtSg=
+
+
+ Headers/NMGLatLngBounds.h
+
+ hash
+
+ UdcC3iaWS+DIeS6zCrpCVWGDkmQ=
+
+ hash2
+
+ IAUBiwoo/qBX5EDZnt2WRbvQNIoAcF/rlpyLO2kT0yE=
+
+
+ Headers/NMGLineString.h
+
+ hash
+
+ HgIjm//jJma+arWa98nQt+YFYRU=
+
+ hash2
+
+ p9cgk8S9O9RbNUUt+nGmAn0+dpiyNd/kYziFLpeOGoI=
+
+
+ Headers/NMGMultiPolygon.h
+
+ hash
+
+ 38p0XaC8qumTRHEFr5BY9qCYTWA=
+
+ hash2
+
+ QM71eIhptraC//JsjA4lG22HkFfzauH3EShpc1P13hs=
+
+
+ Headers/NMGPoint.h
+
+ hash
+
+ ll3MvHhuuOu7ZzXRb9RIIAUZ9Es=
+
+ hash2
+
+ 3Ru/BYFY9zmbfm7F10DK5ZZuNChJuGG0ZOEEskp1O2g=
+
+
+ Headers/NMGPolygon.h
+
+ hash
+
+ uKP/+yQgJvxC4auFCTRYB/SHQW8=
+
+ hash2
+
+ QyKSA3iwnSLP5XH1PELGH7S/rK7xM3xTjAwXU8uuBLQ=
+
+
+ Headers/NMGSegment.h
+
+ hash
+
+ FO0UBIEDEe+GHPOkqfwemeCovdk=
+
+ hash2
+
+ In6x7xVLeA/pTvLv20H93s2Arktlfn6twv6TTj6biAU=
+
+
+ Headers/NMGTm128.h
+
+ hash
+
+ M+mGhF5kW/CYzMZ72LSUh57llw4=
+
+ hash2
+
+ ySHIIFgM9oP5zUDUulpMh4Ut5TUt6CXK5iJ4bCVFRsI=
+
+
+ Headers/NMGUtils.h
+
+ hash
+
+ 1rerJrO3yS795yz3veeb+KPUrKU=
+
+ hash2
+
+ LZlmy0L67qCFCBbvGPmO+1bJdJqBSftYoWA+hNqGA9w=
+
+
+ Headers/NMGUtmk.h
+
+ hash
+
+ GUDo3psJeZNg5qcZRB9cReyABLY=
+
+ hash2
+
+ v4H6fxxXR60T3jqNkKZPZ0/4/F6ZfMX8j5SDCgdidBM=
+
+
+ Headers/NMGWebMercatorCoord.h
+
+ hash
+
+ Ih/WDvdEwiwiKBTP+pwgDtzL0/0=
+
+ hash2
+
+ AUnqRhahKU1dkzEPnUZxT6gMp0xa5Dqk0ObZAb+bTNo=
+
+
+ Headers/NMapsGeometry.h
+
+ hash
+
+ vKEoyoa3PoDXOhmPgAbgAYw2W/U=
+
+ hash2
+
+ m9yCSRA2d7F6WMZr58O7vYPvjRASF6a6RRugxUF9QfE=
+
+
+ Modules/module.modulemap
+
+ hash
+
+ hL2p0qf0W2W9ZCFpUFyhKF8oIFg=
+
+ hash2
+
+ 2XbZXLQy7ciILbhi6e8AdtbZ9Kj0oHo/PUujlJ2+kEk=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/Info.plist b/Frameworks/NMapsMap/NMapsMap.xcframework/Info.plist
new file mode 100644
index 00000000..103205e2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ NMapsMap.framework/NMapsMap
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ NMapsMap.framework
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ BinaryPath
+ NMapsMap.framework/NMapsMap
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ NMapsMap.framework
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Assets.car b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Assets.car
new file mode 100644
index 00000000..a3da96d3
Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Assets.car differ
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Base.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Base.lproj/Foundation.strings
new file mode 100644
index 00000000..9cbcebb1
Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Base.lproj/Foundation.strings differ
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCBuilder.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCBuilder.h
new file mode 100644
index 00000000..68cbd2fe
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCBuilder.h
@@ -0,0 +1,76 @@
+#import "NMFFoundation.h"
+
+@protocol NMCClusteringKey;
+@protocol NMCClusterMarkerUpdater;
+@protocol NMCLeafMarkerUpdater;
+@class NMCClusterer<__covariant KeyType : NSObject *>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ `NMCClusterer`를 생성하는 빌더 클래스. 클러스터링할 거리, 최소/최대 줌 레벨, 애니메이션 여부, 클러스터/단말
+ 클러스터/단말 마커 커스터미이징 등 기본적인 기능을 제공합니다. 복잡한 전략과 기능이 필요하다면
+ `NMCComplexBuilder`를 사용해야 합니다.
+ */
+NMF_EXPORT
+@interface NMCBuilder<__covariant KeyType : NSObject *> : NSObject
+
+/**
+ 클러스터링할 기준 거리. 클러스터에 추가된 두 데이터의 화면상 거리가 기준 거리보다 가깝다면
+ 클러스터링되어 하나의 마커로 나타납니다.
+
+ 기본값은 `NMC_DEFAULT_SCREEN_DISTANCE`입니다.
+ */
+@property (nonatomic, assign) double screenDistance;
+
+/**
+ 클러스터링할 최소 줌 레벨. 카메라의 줌 레벨이 최소 줌 레벨보다 낮다면 두 데이터가 화면상 기준
+ 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최소 줌 레벨이 4라면, 카메라의
+ 줌 레벨을 3레벨 이하로 축소하더라도 4레벨의 클러스터가 더 이상 클러스터링되지 않고 그대로 유지됩니다.
+
+ 기본값은 `NMF_MIN_ZOOM`입니다.
+ */
+@property (nonatomic, assign) NSInteger minZoom;
+
+/**
+ 클러스터링할 최대 줌 레벨. 카메라의 줌 레벨이 최대 줌 레벨보다 높다면 두 데이터가 화면상 기준
+ 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최대 줌 레벨이 16이라면,
+ 카메라의 줌 레벨을 17레벨 이상으로 확대하면 모든 데이터가 클러스터링되지 않고 낱개로 나타납니다. 따라서
+ 클러스터링할 최대 줌 레벨이 지도의 최대 줌 레벨보다 크거나 같다면 카메라를 최대 줌 레벨로 확대하더라도 일부
+ 데이터는 여전히 클러스터링된 채 더 이상 펼쳐지지 않을 수 있습니다.
+
+ 기본값은 `NMF_MAX_ZOOM`입니다.
+ */
+@property (nonatomic, assign) NSInteger maxZoom;
+
+/**
+ 카메라 확대/축소시 클러스터가 펼쳐지는/합쳐지는 애니메이션을 적용할지 여부.
+
+ 기본값은 `YES`입니다.
+ */
+@property (nonatomic, assign) bool animate;
+
+/**
+ 클러스터 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터.
+
+ 기본값은 `NMCDefaultClusterMarkerUpdater` 인스턴스입니다.
+ */
+@property (nonatomic, nonnull) id clusterMarkerUpdater;
+
+/**
+ 단말 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터.
+
+ 기본값은 `NMCDefaultLeafMarkerUpdater` 인스턴스입니다.
+ */
+@property (nonatomic, nonnull) id leafMarkerUpdater;
+
+/**
+ `NMCClusterer` 객체를 생성합니다.
+
+ @return `NMCClusterer` 객체.
+ */
+- (NMCClusterer * _Nonnull)build;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCCluster.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCCluster.h
new file mode 100644
index 00000000..6b0cb3a2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCCluster.h
@@ -0,0 +1,39 @@
+#import "NMCNode.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 클러스터 노드를 의미하는 클래스.
+ */
+NMF_EXPORT
+@interface NMCCluster : NMCNode
+
+/**
+ 태그. `NMCTagMergeStrategy.mergeTag:`로 병합한 객체.
+ */
+@property (nonatomic, nullable, readonly) NSObject *tag;
+
+/**
+ 자식 `NMCNode`의 목록.
+ */
+@property (nonatomic, nonnull, readonly) NSArray *children;
+
+/**
+ 전체 `NMCLeaf`의 개수.
+ */
+@property (nonatomic, assign, readonly) NSInteger size;
+
+/**
+ 웹 메르카토르 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord;
+
+/**
+ 좌표. `NMCPositioningStrategy.getPosition:`으로 구한 웹 메르카토르 좌표를
+ `NMGLatLng`으로 변환한 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGLatLng *position;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h
new file mode 100644
index 00000000..2c1d7be0
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h
@@ -0,0 +1,31 @@
+#import "NMCMarkerInfo.h"
+
+@class NMGLatLng;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 지도에 노출되어야 하는 클러스터 마커의 속성을 나타내는 클래스.
+ */
+NMF_EXPORT
+@interface NMCClusterMarkerInfo : NMCMarkerInfo
+
+/**
+ 태그. `NMCTagMergeStrategy.mergeTag:`로 병합한 객체.
+ */
+@property (nonatomic, nullable, readonly) NSObject *tag;
+
+/**
+ 좌표. `NMCPositioningStrategy.getPosition:`으로 구한 웹 메르카토르 좌표를
+ `NMGLatLng`으로 변환한 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGLatLng *position;
+
+/**
+ 전체 자식 단말 마커의 개수.
+ */
+@property (nonatomic, assign, readonly) NSInteger size;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h
new file mode 100644
index 00000000..46eadfc5
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h
@@ -0,0 +1,33 @@
+#import "NMFFoundation.h"
+
+@class NMCClusterMarkerInfo;
+@class NMFMarker;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 단말 마커의 정보를 `NMFMarker`의 속성에 반영해 갱신하는 델리게이트.
+
+ 단말 마커가 지도에 처음 노출되거나 정보가 변경되면 `updateClusterMarker::` 메서드가 호출되며,
+ 이 메서드로 전달되는 `NMFMarker`가 화면에 노출됩니다. 따라서 이 메서드 내에서 `NMCClusterMarkerInfo`의
+ 정보를 가져와 `NMFMarker`의 속성에 적절하게 반영하도록 구현해야 합니다. 단, `NMFMarker`의
+ `NMFMarker.position` 및 `NMFMarker.mapView` 속성은 자동으로 관리되므로 별도로
+ 반영할 필요가 없습니다.
+
+ @see `NMCBuilder.clusterMarkerUpdater`
+ @see `NMCComplexBuilder.clusterMarkerUpdater`
+ */
+NMF_EXPORT
+@protocol NMCClusterMarkerUpdater
+
+/**
+ `info`의 정보를 `marker`의 속성에 반영합니다.
+
+ @param info 클러스터 마커의 정보.
+ @param marker 클러스터 마커의 정보를 포현할 `NMFMarker` 객체.
+ */
+- (void)updateClusterMarker:(NMCClusterMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterer.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterer.h
new file mode 100644
index 00000000..e849743e
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterer.h
@@ -0,0 +1,150 @@
+#import "NMFFoundation.h"
+#import "NMCClustererUpdateCallback.h"
+
+@protocol NMCClusteringKey;
+@class NMFMapView;
+@protocol NMCClusterMarkerUpdater;
+@protocol NMCLeafMarkerUpdater;
+
+/**
+ 두 마커가 인접했을 때 클러스터링될 기본 화면상 거리. pt 단위.
+ */
+const static double NMC_DEFAULT_SCREEN_DISTANCE = 70;
+
+/**
+ 클러스터가 펼쳐지는/합쳐지는 애니메이션의 기본 지속 시간. 초 단위.
+ */
+const static double NMC_DEFAULT_ANIMATION_DURATION = 0.3;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 겹치는 여러 마커를 클러스터링해서 하나의 마커로 보여주는 기능을 제공하는 클래스. 이 클래스의 인스턴스는 직접 생성할
+ 수 없고 `NMCBuilder` 또는 `NMCComplexBuilder` 빌더 클래스를 이용해 생성해야 합니다. 여러 마커가 시각적으로
+ 겹치는 상황을 방지하는 기본적인 기능만 필요하다면 `NMCBuilder`를, 복잡한 전략과 기능이 필요하다면
+ `NMCComplexBuilder`를 사용하는 것을 권장합니다.
+
+ `NMCClusterer`를 사용하려면 먼저 데이터의 키를 의미하는 `NMCClusteringKey` 프로토콜을 구현한 클래스를
+ 정의해야 합니다. 이 클래스를 타입 파라메터로 지정해 `NMCClusterer` 인스턴스를 만들고,
+ `add:Tag:` 또는 `addAll:`을 호출해 데이터를 추가한 후 `mapView`를
+ 이용해 지도 객체를 지정하면 지정한 데이터가 클러스터링되어 나타납니다.
+ */
+NMF_EXPORT
+@interface NMCClusterer<__covariant KeyType : NSObject *> : NSObject
+
+/**
+ 클러스터를 `mapView`에 추가하거나, 클러스터가 추가된 지도 객체를 반환합니다.
+ 지도에 추가된 상태가 아닐 경우 `nil`을 반환합니다.
+ */
+@property (nonatomic, weak, nullable) NMFMapView *mapView;
+
+/**
+ 데이터가 비어있는지 여부.
+ */
+@property (nonatomic, assign, readonly) BOOL empty;
+
+- (instancetype)initWithThresholdStrategy:(id _Nonnull)thresholdStrategy
+ DistanceStrategy:(id _Nonnull)distanceStrategy
+ PositioningStrategy:(id _Nonnull)positioningStrategy
+ TagMergeStrategy:(id _Nonnull)tagMergeStrategy
+ MarkerManager:(id _Nonnull)markerManager
+ ClusterMarkerUpdater:(id _Nonnull)clusterMarkerUpdater
+ LeafMarkerUpdater:(id _Nonnull)leafMarkerUpdater
+ MinClusteringZoom:(NSInteger)minClusteringZoom
+ MaxClusteringZoom:(NSInteger)maxClusteringZoom
+ MinIndexingZoom:(NSInteger)minIndexingZoom
+ MaxIndexingZoom:(NSInteger)maxIndexingZoom
+ MaxScreenDistance:(double)maxScreenDistance
+ AnimationDuration:(double)animationDuration
+ UpdateOnChange:(BOOL)updateOnChange;
+
+/**
+ 데이터에 `key`가 포함되어있는지 여부.
+
+ @param key 포함 여부를 확인할 키.
+ @return 포함되어있을 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)contains:(KeyType _Nonnull)key;
+
+/**
+ 모든 데이터를 제거합니다.
+ */
+- (void)clear;
+
+/**
+ 모든 데이터를 제거합니다.
+
+ @param callback 데이터 제거가 완료되면 호출될 콜백.
+ */
+- (void)clearWithCallback:(NMCClustererUpdateCallback _Nullable)callback;
+
+/**
+ 데이터를 추가합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러
+ 데이터를 한 번에 추가하고자 할 경우 `addAll:`을 사용하면 성능이 향상됩니다.
+
+ @param key 데이터의 키.
+ @param tag 데이터의 태그.
+ */
+- (void)add:(KeyType _Nonnull)key :(NSObject * _Nullable)tag;
+
+/**
+ 데이터를 추가합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러
+ 데이터를 한 번에 추가하고자 할 경우 `addAll:`을 사용하면 성능이 향상됩니다.
+
+ @param key 데이터의 키.
+ @param tag 데이터의 태그.
+ @param callback 데이터 추가가 완료되면 호출될 콜백.
+ */
+- (void)add:(KeyType _Nonnull)key :(NSObject * _Nullable)tag
+ Callback:(NMCClustererUpdateCallback _Nullable)callback;
+
+/**
+ 여러 데이터를 한 번에 추가합니다. 데이터를 한 번에 추가할 경우 지도에도 한 번에 반영됩니다.
+
+ @param keyTagMap 키가 데이터의 키, 값이 데이터의 태그인 `NSDictionary`.
+ */
+- (void)addAll:(NSDictionary * _Nonnull)keyTagMap;
+
+/**
+ 여러 데이터를 한 번에 추가합니다. 데이터를 한 번에 추가할 경우 지도에도 한 번에 반영됩니다.
+
+ @param keyTagMap 키가 데이터의 키, 값이 데이터의 태그인 `NSDictionary`.
+ @param callback 데이터 추가가 완료되면 호출될 콜백.
+ */
+- (void)addAll:(NSDictionary * _Nonnull)keyTagMap
+ Callback:(NMCClustererUpdateCallback _Nullable)callback;
+
+/**
+ 데이터를 제거합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러
+ 데이터를 한 번에 제거하고자 할 경우 `removeAll:`을 사용하면 성능이 향상됩니다.
+ */
+- (void)remove:(KeyType _Nonnull)key;
+
+/**
+ 데이터를 제거합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러
+ 데이터를 한 번에 제거하고자 할 경우 `removeAll:`을 사용하면 성능이 향상됩니다.
+
+ @param callback 데이터 제거가 완료되면 호출될 콜백.
+ */
+- (void)remove:(KeyType _Nonnull)key
+ Callback:(NMCClustererUpdateCallback _Nullable)callback;
+
+/**
+ 여러 데이터를 한 번에 제거합니다. 데이터를 한 번에 제거할 경우 지도에도 한 번에 반영됩니다.
+
+ @param keys 제거할 키의 목록.
+ */
+- (void)removeAll:(NSArray * _Nonnull)keys;
+
+/**
+ 여러 데이터를 한 번에 제거합니다. 데이터를 한 번에 제거할 경우 지도에도 한 번에 반영됩니다.
+
+ @param keys 제거할 키의 목록.
+ @param callback 데이터 제거가 완료되면 호출될 콜백.
+ */
+- (void)removeAll:(NSArray * _Nonnull)keys
+ Callback:(NMCClustererUpdateCallback _Nullable)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h
new file mode 100644
index 00000000..6f28dfba
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h
@@ -0,0 +1,6 @@
+#import "NMFFoundation.h"
+
+/**
+ 클러스터러의 데이터 갱신이 완료되면 호출되는 콜백 타입.
+ */
+typedef void (^NMCClustererUpdateCallback)(void);
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusteringKey.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusteringKey.h
new file mode 100644
index 00000000..dbb0b553
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusteringKey.h
@@ -0,0 +1,29 @@
+#import "NMFFoundation.h"
+
+@class NMGLatLng;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 클러스터링될 데이터의 키를 의미하는 인터페이스.
+
+ 클러스터러를 사용하고자 할 경우 이 인터페이스를 구현하는 클래스를 만들고, 그 타입을 `NMCClusterer`의 타입
+ 파라미터로 지정해야 합니다.
+
+ `NMCClusterer`는 두 `NMCClusteringKey` 인스턴스가 동일하다면(equality) 동일한 데이터로 간주합니다.
+ 즉, 두 인스턴스의 좌표가 동일하더라도, `NSObject.isEqual:`가 `NO`라면 다른 데이터로 간주합니다.
+
+ 이 특성을 이용해 동일한 좌표에 위치하는 여러 데이터를 중복해서 클러스터링할 수 있으므로 이 언터페이스를 구현하는
+ 클래스는 `NSObject.isEqual:`와 `NSObject.hash:`도 구현하는 것이 권장됩니다.
+ */
+NMF_EXPORT
+@protocol NMCClusteringKey
+
+/**
+ 데이터의 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGLatLng *position;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCComplexBuilder.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCComplexBuilder.h
new file mode 100644
index 00000000..b45a1a21
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCComplexBuilder.h
@@ -0,0 +1,148 @@
+#import "NMFFoundation.h"
+
+@protocol NMCClusteringKey;
+@protocol NMCThresholdStrategy;
+@protocol NMCDistanceStrategy;
+@protocol NMCPositioningStrategy;
+@protocol NMCTagMergeStrategy;
+@protocol NMCMarkerManager;
+@protocol NMCClusterMarkerUpdater;
+@protocol NMCLeafMarkerUpdater;
+@class NMCClusterer<__covariant KeyType : NSObject *>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ `NMCClusterer`를 생성하는 빌더 클래스. 복잡한 전략과 기능을 제공합니다. 간단한 기능만 필요하다면
+ `NMCBuilder`를 사용하는 것을 권장합니다.
+ */
+NMF_EXPORT
+@interface NMCComplexBuilder<__covariant KeyType : NSObject *> : NSObject
+
+/**
+ 두 `NMCNode`를 클러스터링할 기준 거리를 구하는 전략.
+ */
+@property (nonatomic, nonnull) id thresholdStrategy;
+
+/**
+ 두 `NMCNode`간의 거리를 측정하는 전략.
+ */
+@property (nonatomic, nonnull) id distanceStrategy;
+
+/**
+ 두 `NMCCluster`의 좌표를 정하는 전략.
+ */
+@property (nonatomic, nonnull) id positioningStrategy;
+
+/**
+ 부모 `NMCCluster`의 자식 `NMCNode`들의 태그를 병합하는 전략.
+ */
+@property (nonatomic, nonnull) id tagMergeStrategy;
+
+/**
+ `NMCClusterer`에서 노출하는 마커를 관리하는 매니저.
+ */
+@property (nonatomic, nonnull) id markerManager;
+
+/**
+ 클러스터 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터.
+
+ 기본값은 `NMCDefaultClusterMarkerUpdater` 인스턴스입니다.
+ */
+@property (nonatomic, nonnull) id clusterMarkerUpdater;
+
+/**
+ 단말 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터.
+
+ 기본값은 `NMCDefaultLeafMarkerUpdater` 인스턴스입니다.
+ */
+@property (nonatomic, nonnull) id leafMarkerUpdater;
+
+/**
+ 클러스터링할 최소 줌 레벨. 카메라의 줌 레벨이 최소 줌 레벨보다 낮다면 두 데이터가 화면상 기준
+ 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최소 줌 레벨이 4라면, 카메라의
+ 줌 레벨을 3레벨 이하로 축소하더라도 4레벨의 클러스터가 더 이상 클러스터링되지 않고 그대로 유지됩니다.
+
+ 기본값은 `NMF_MIN_ZOOM`입니다.
+ */
+@property (nonatomic, assign) NSInteger minClusteringZoom;
+
+/**
+ 클러스터링할 최대 줌 레벨. 카메라의 줌 레벨이 최대 줌 레벨보다 높다면 두 데이터가 화면상 기준
+ 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최대 줌 레벨이 16이라면,
+ 카메라의 줌 레벨을 17레벨 이상으로 확대하면 모든 데이터가 클러스터링되지 않고 낱개로 나타납니다. 따라서
+ 클러스터링할 최대 줌 레벨이 지도의 최대 줌 레벨보다 크거나 같다면 카메라를 최대 줌 레벨로 확대하더라도 일부
+ 데이터는 여전히 클러스터링된 채 더 이상 펼쳐지지 않을 수 있습니다.
+
+ 기본값은 `NMF_MAX_ZOOM` - `1`입니다.
+ */
+@property (nonatomic, assign) NSInteger maxClusteringZoom;
+
+/**
+ 인덱싱할 최소 줌 레벨. 클러스터링할 최소 줌 레벨보다 작거나 같아야 합니다.
+
+ `NMCClusterer`는 효율적인 클러스터링을 위해 공간 인덱스를 사용하는데 인덱스를 구축하는 데 자원이
+ 소모됩니다. 따라서 인덱싱할 최소 줌 레벨을 적절하게 제한하면 성능이 향상될 수 있습니다. 반면 과도하게
+ 제한하면 인덱싱할 줌 레벨 미만의 줌 레벨에서 렌더링 성능이 저하될 수 있습니다. 일반적으로 지도의 최소 줌
+ 레벨과 동일하게 지정할 때 가장 좋은 효율을 낼 수 있습니다.
+
+ 기본값은 `NMF_MIN_ZOOM`입니다.
+ */
+@property (nonatomic, assign) NSInteger minIndexingZoom;
+
+/**
+ 인덱싱할 최대 줌 레벨을 반환합니다. 클러스터링할 최대 줌 레벨보다 크거나 같아야 합니다.
+
+ `NMCClusterer`는 효율적인 클러스터링을 위해 공간 인덱스를 사용하는데 인덱스를 구축하는 데 자원이
+ 소모됩니다. 따라서 인덱싱할 최대 줌 레벨을 적절하게 제한하면 성능이 향상될 수 있습니다. 반면 과도하게
+ 제한하면 인덱싱할 줌 레벨을 초과하는 줌 레벨에서 렌더링 성능이 저하될 수 있습니다. 일반적으로 지도의 최대 줌
+ 레벨보다 `1` 작게 지정할 때 가장 좋은 효율을 낼 수 있습니다.
+
+ 기본값은 `NMF_MAX_ZOOM` - `1`입니다.
+ */
+@property (nonatomic, assign) NSInteger maxIndexingZoom;
+
+/**
+ 클러스터링할 최대 화면 거리. 두 마커의 화면상 거리가 이 값보다 작을 경우에만 클러스터링 후보가
+ 됩니다. 즉, 두 마커의 화면상 거리가 이 값보다 크다면,
+ `NMCDistanceStrategy.getDistance:Node1:Node2:`가 반환한 둘 간의 거리가
+ `NMCThresholdStrategy.getThreshold:`보다 크더라도 클러스터링되지 않습니다. 한편 최대 화면 거리는 탐색
+ 공간을 제한하는 역할을 하므로 값을 크게 지정할수록 성능이 저하됩니다.
+
+ 따라서 `NMCDistanceStrategy`와 `NMCThresholdStrategy`를 별도로 지정했다면 전략을 고려해 적절한 값을
+ 지정해야 합니다. 예를 들어 `NMCDefaultDistanceStrategy`와 `NMCDefaultThresholdStrategy`를 사용한다면
+ `NMCDefaultThresholdStrategy`의 생성자 파라메터로 지정한 거리와 동일한 값을 지정했을 때 가장 좋은 효율을
+ 낼 수 있습니다.
+
+ 기본값은 `NMC_DEFAULT_SCREEN_DISTANCE`입니다.
+ */
+@property (nonatomic, assign) double maxScreenDistance;
+
+/**
+ 카메라 확대/축소시 클러스터가 펼쳐지는/합쳐지는 애니메이션의 지속 시간.`0`일 경우
+ 애니메이션이 적용되지 않습니다.
+
+ 기본값은 `NMC_DEFAULT_ANIMATION_DURATION`입니다.
+ */
+@property (nonatomic, assign) double animationDuration;
+
+/**
+ 화면상 마커를 갱신할 때 `NMFMapViewCameraDelegate.mapViewCameraIdle:`대신
+ `NMFMapViewCameraDelegate.mapView:cameraIsChangingByReason:`를 사용할지 여부.
+ `NMFMapViewCameraDelegate.mapView:cameraIsChangingByReason:`를 사용하면
+ 더 빠르게 갱신되지만 성능이 하락합니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic, assign) BOOL updateOnChange;
+
+/**
+ `NMCClusterer` 객체를 생성합니다.
+
+ @return `NMCClusterer` 객체.
+ */
+- (NMCClusterer * _Nonnull)build;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h
new file mode 100644
index 00000000..b11b36e2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h
@@ -0,0 +1,41 @@
+#import "NMCClusterMarkerUpdater.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 클러스터 마커의 기본 앵커. 가운데를 가리킵니다.
+ */
+extern const NMF_EXPORT CGPoint NMF_CLUSTER_ANCHOR_DEFAULT;
+
+/**
+ 기본 `NMCClusterMarkerUpdater` 구현체. `NMFMarker`의 다음과 같은 속성을 지정합니다.
+
+ -
+ 아이콘(`NMFMarker.iconImage`): 클러스터의 크기(`NMCClusterMarkerInfo.size`)에 따라
+ `NMF_MARKER_IMAGE_CLUSTER_LOW_DENSITY`, `NMF_MARKER_IMAGE_CLUSTER_MEDIUM_DENSITY`,
+ `NMF_MARKER_IMAGE_CLUSTER_HIGH_DENSITY` 중 하나로 지정됩니다.
+
+ - 앵커(`NMFMarker.anchor`): `CGPointMake(0.5, 0.5)`로 지정됩니다.
+ - 캡션 텍스트(`NMFMarker.captionText`): 클러스터의 크기(`NMCClusterMarkerInfo.size`)로 지정됩니다.
+ - 캡션 정렬 방향(`NMFMarker.captionAligns`): `NMFAlignType.center`로 지정됩니다.
+ - 캡션 색상(`NMFMarker.captionColor`): `UIColor.whiteColor`로 지정됩니다.
+ - 캡션 외곽 색상(`NMFMarker.captionHaloColor`): `UIColor.clearColor`로 지정됩니다.
+ -
+ 마커 클릭 시 동작(`NMFMarker.touchHandler`): 클러스터가 펼쳐지는 최소 줌 레벨로 카메라를 확대하는 동작으로 지정됩니다.
+
+
+ */
+NMF_EXPORT
+@interface NMCDefaultClusterMarkerUpdater : NSObject
+
+/**
+ `info`의 정보를 `marker`의 속성에 반영합니다.
+
+ @param info 클러스터 마커의 정보.
+ @param marker 클러스터 마커의 정보를 포현할 `NMFMarker` 객체.
+ */
+- (void)updateClusterMarker:(NMCClusterMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h
new file mode 100644
index 00000000..3e6e383a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h
@@ -0,0 +1,23 @@
+#import "NMCDistanceStrategy.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ `NMCDistanceStrategy` 구현체. 두 `NMCNode`간의 화면상 거리를 측정합니다.
+ */
+NMF_EXPORT
+@interface NMCDefaultDistanceStrategy : NSObject
+
+/**
+ 줌 레벨이 `zoom`일 때 `node1`과 `node2`간의 거리를 반환합니다.
+
+ @param zoom 거리를 측정할 줌 레벨.
+ @param node1 거리를 측정할 첫 번째 `NMCNode` 객체.
+ @param node2 거리를 측정할 두 번째 `NMCNode` 객체.
+ @return `node1`과 `node2`간의 화면상 거리.
+ */
+- (double)getDistance:(NSInteger)zoom Node1:(NMCNode * _Nonnull)node1 Node2:(NMCNode * _Nonnull)node2;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h
new file mode 100644
index 00000000..c391ee61
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h
@@ -0,0 +1,30 @@
+#import "NMCLeafMarkerUpdater.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 `NMCLeafMarkerUpdater` 구현체. `NMFMarker`의 다음과 같은 속성을 지정합니다.
+
+ - 아이콘(`NMFMarker.iconImage`): `NMF_MARKER_IMAGE_DEFAULT`로 지정됩니다.
+ - 앵커(`NMFMarker.anchor`): `CGPointMake(0.5, 1.0)`로 지정됩니다.
+ - 캡션 텍스트(`NMFMarker.captionText`): 빈 문자열(`""`)로 지정됩니다.
+ - 캡션 정렬 방향(`NMFMarker.captionAligns`): `NMFAlignType.bottom`로 지정됩니다.
+ - 캡션 색상(`NMFMarker.captionColor`): `UIColor.blackColor`로 지정됩니다.
+ - 캡션 외곽 색상(`NMFMarker.captionHaloColor`): `UIColor.whiteColor`로 지정됩니다.
+ - 마커 클릭 시 동작(`NMFMarker.touchHandler`): `nil`로 지정되어 아무런 동작도 하지 않습니다.
+
+ */
+NMF_EXPORT
+@interface NMCDefaultLeafMarkerUpdater : NSObject
+
+/**
+ `info`의 정보를 `marker`의 속성에 반영합니다.
+
+ @param info 단말 마커의 정보.
+ @param marker 단말 마커의 정보를 포현할 `NMFMarker` 객체.
+ */
+- (void)updateLeafMarker:(NMCLeafMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h
new file mode 100644
index 00000000..d27cd83a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h
@@ -0,0 +1,49 @@
+#import "NMFFoundation.h"
+#import "NMCMarkerManager.h"
+
+/**
+ 기본 재사용 풀 크기.
+ */
+const static double NMC_DEFAULT_MAX_POOL_SIZE = 200;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 `NMCMarkerManager` 구현체. 이 클래스를 이용하면 `NMFMarker` 객체가 재사용되어 성능이 향상됩니다. 대신 한
+ 번 사용되었던 `NMFMarker` 객체의 속성이 초기화되지 않고 계속 남으므로 `NMCClusterMarkerUpdater`와
+ `NMCLeafMarkerUpdater`에서 매번 `NMFMarker`의 속성을 지정해야 합니다. 단, 변하지 않는 속성이 있다면
+ `createMarker:`를 오버라이드해 `NMFMarker`의 속성을 생성 직후 한 번만 지정하도록 최적화할 수 있습니다.
+ */
+@interface NMCDefaultMarkerManager : NSObject
+
+/**
+ 기본 생성자. 재사용 풀의 크기는 `NMC_DEFAULT_MAX_POOL_SIZE`로 지정됩니다.
+ */
+- (instancetype)init;
+
+/**
+ 재사용 풀의 크기를 지정하는 생성자.
+
+ @param maxPoolSize 재사용 풀의 크기.
+ */
+- (instancetype)initWithMaxPoolSize:(NSInteger)maxPoolSize;
+
+/**
+ 풀로부터 `NMCMarker` 객체를 가져와 반환합니다. 풀이 비어있다면 `createMarker:`를 호출해 새로운 마커
+ 객체를 생성합니다.
+ */
+- (NMFMarker * _Nonnull)retainMarker:(NMCMarkerInfo * _Nonnull)info;
+
+/**
+ `NMFMarker` 객체를 다시 사용할 수 있도록 풀로 반환합니다.
+ */
+- (void)releaseMarker:(NMCMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker;
+
+/**
+ 새로운 마커 객체를 생성합니다.
+ */
+- (NMFMarker * _Nonnull)createMarker;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h
new file mode 100644
index 00000000..6c0d3415
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h
@@ -0,0 +1,24 @@
+#import "NMCPositioningStrategy.h"
+
+@class NMCCluster;
+@class NMGWebMercatorCoord;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 `NMCDefaultPositioningStrategy` 구현체. 자식 노드의 좌표의 무게 중심을 구합니다.
+ */
+NMF_EXPORT
+@interface NMCDefaultPositioningStrategy : NSObject
+
+/**
+ `cluster`에 속한 자식 `NMCNode`의 무게 중심 좌표를 반환합니다.
+
+ @param cluster 좌표를 구해야 하는 `cluster` 객체.
+ @return 웹 메르카토르 좌표.
+ */
+- (NMGWebMercatorCoord * _Nonnull)getPosition:(NMCCluster * _Nonnull)cluster;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h
new file mode 100644
index 00000000..aa4aaf4d
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h
@@ -0,0 +1,23 @@
+#import "NMCTagMergeStrategy.h"
+
+@class NMCCluster;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 `NMCDefaultTagMergeStrategy` 구현체. 태그를 병합하지 않고 버립니다.
+ */
+NMF_EXPORT
+@interface NMCDefaultTagMergeStrategy : NSObject
+
+/**
+ `cluster`에 속한 자식 `NMCNode`의 태그를 사용하지 않고 항상 `nil`을 반환합니다.
+
+ @param cluster 태그를 병합할 `cluster` 객체.
+ @return 병합된 `cluster`의 태그.
+ */
+- (NSObject * _Nullable)mergeTag:(NMCCluster * _Nonnull)cluster;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h
new file mode 100644
index 00000000..67393613
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h
@@ -0,0 +1,28 @@
+#import "NMCThresholdStrategy.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * 기본 `NMCThresholdStrategy` 구현체. 고정된 기준 거리를 사용합니다.
+ */
+NMF_EXPORT
+@interface NMCDefaultThresholdStrategy : NSObject
+
+/**
+ 생성자.
+
+ @param threshold 기준 거리.
+ */
+- (instancetype)initWithThreshold:(double)threshold;
+
+/**
+ 생성자로 지정된 `threshold`를 반환합니다.
+
+ @param zoom 기준 거리를 구할 줌 레벨.
+ @return 클러스터링할 기준 거리.
+ */
+- (double)getThreshold:(NSInteger)zoom;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDistanceStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDistanceStrategy.h
new file mode 100644
index 00000000..9baf5b24
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDistanceStrategy.h
@@ -0,0 +1,33 @@
+#import "NMFFoundation.h"
+
+@class NMCNode;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 각 `NMCNode`간의 거리를 측정하는 전략에 대한 인터페이스.
+
+ 이 전략은 `NMCThresholdStrategy`와 밀접하게 연관되어 있습니다. 두 노드 `node1`, `node2`가
+ 있을 때, `getDistance:Node1:Node2`가 반환한 둘 간의 거리가 `NMCThresholdStrategy.getThreshold`가
+ 반환한 기준값보다 작거나 같으면 두 노드는 zoom
레벨에서 클러스터링됩니다.
+
+ @see `NMCComplexBuilder.distanceStrategy`
+ @see `NMCComplexBuilder.thresholdStrategy`
+ @see `NMCThresholdStrategy.getThreshold:`
+ */
+NMF_EXPORT
+@protocol NMCDistanceStrategy
+
+/**
+ 줌 레벨이 `zoom`일 때 `node1`과 `node2`간의 거리를 반환합니다.
+
+ @param zoom 거리를 측정할 줌 레벨.
+ @param node1 거리를 측정할 첫 번째 `NMCNode` 객체.
+ @param node2 거리를 측정할 두 번째 `NMCNode` 객체.
+ @return `node1`과 `node2`간의 거리.
+ */
+- (double)getDistance:(NSInteger)zoom Node1:(NMCNode * _Nonnull)node1 Node2:(NMCNode * _Nonnull)node2;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeaf.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeaf.h
new file mode 100644
index 00000000..789402bb
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeaf.h
@@ -0,0 +1,38 @@
+#import "NMCNode.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 단말 노드를 의미하는 클래스.
+ */
+NMF_EXPORT
+@interface NMCLeaf : NMCNode
+
+/**
+ 키. `NMCClusterer.add:Tag:`로 지정한 `key`가 반환됩니다.
+ */
+@property (nonatomic, nonnull, readonly) NSObject *key;
+
+/**
+ 태그. `NMCClusterer.add:Tag:`로 지정한 `tag`가 반환됩니다.
+ */
+@property (nonatomic, nullable, readonly) NSObject *tag;
+
+/**
+ 자식 노드의 개수. 항상 `1`이 반환됩니다.
+ */
+@property (nonatomic, assign, readonly) NSInteger size;
+
+/**
+ 웹 메르카토르 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord;
+
+/**
+ 좌표. `NMCClusterer.add:Tag:`로 지정한 `NMCClusteringKey.position`이 반환됩니다.
+ */
+@property (nonatomic, nonnull, readonly) NMGLatLng *position;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h
new file mode 100644
index 00000000..4273f7e4
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h
@@ -0,0 +1,30 @@
+#import "NMCMarkerInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol NMCClusteringKey;
+
+/**
+ 지도에 노출되어야 하는 단말 마커의 속성을 나타내는 클래스.
+ */
+NMF_EXPORT
+@interface NMCLeafMarkerInfo : NMCMarkerInfo
+
+/**
+ 키. `NMCClusterer.add:Tag:`로 지정한 `key`.
+ */
+@property (nonatomic, nonnull, readonly) id key;
+
+/**
+ 태그. `NMCClusterer.add:Tag:`로 지정한 `tag`.
+ */
+@property (nonatomic, nullable, readonly) NSObject *tag;
+
+/**
+ 좌표. `NMCClusterer.add:Tag:`로 지정한 `NMCClusteringKey.position`.
+ */
+@property (nonatomic, nonnull, readonly) NMGLatLng *position;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h
new file mode 100644
index 00000000..746caa70
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h
@@ -0,0 +1,33 @@
+#import "NMFFoundation.h"
+
+@class NMCLeafMarkerInfo;
+@class NMFMarker;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 단말 마커의 정보를 `NMFMarker`의 속성에 반영해 갱신하는 델리게이트.
+
+ 단말 마커가 지도에 처음 노출되거나 정보가 변경되면 `updateLeafMarker::` 메서드가 호출되며,
+ 이 메서드로 전달되는 `NMFMarker`가 화면에 노출됩니다. 따라서 이 메서드 내에서 `NMCLeafMarkerInfo`의
+ 정보를 가져와 `NMFMarker`의 속성에 적절하게 반영하도록 구현해야 합니다. 단, `NMFMarker`의
+ `NMFMarker.position` 및 `NMFMarker.mapView` 속성은 자동으로 관리되므로 별도로
+ 반영할 필요가 없습니다.
+
+ @see `NMCBuilder.leafMarkerUpdater`
+ @see `NMCComplexBuilder.leafMarkerUpdater`
+ */
+NMF_EXPORT
+@protocol NMCLeafMarkerUpdater
+
+/**
+ `info`의 정보를 `marker`의 속성에 반영합니다.
+
+ @param info 단말 마커의 정보.
+ @param marker 단말 마커의 정보를 포현할 `NMFMarker` 객체.
+ */
+- (void)updateLeafMarker:(NMCLeafMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerInfo.h
new file mode 100644
index 00000000..08238504
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerInfo.h
@@ -0,0 +1,36 @@
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMGLatLng;
+
+/**
+ 지도에 노출되어야 하는 마커의 속성을 나타내는 클래스.
+ 이 클래스의 인스턴스는 불변이며 모든 스레드에서 안전하게 접근할 수 있습니다.
+ */
+NMF_EXPORT
+@interface NMCMarkerInfo : NSObject
+
+/**
+ 태그.
+ */
+@property (nonatomic, nullable, readonly) NSObject *tag;
+
+/**
+ 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGLatLng *position;
+
+/**
+ 마커가 노출되는 최소 줌 레벨.
+ */
+@property (nonatomic, assign, readonly) NSInteger minZoom;
+
+/**
+ 마커가 노출되는 최대 줌 레벨.
+ */
+@property (nonatomic, assign, readonly) NSInteger maxZoom;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerManager.h
new file mode 100644
index 00000000..b979a743
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerManager.h
@@ -0,0 +1,37 @@
+#import "NMFFoundation.h"
+
+@class NMCMarkerInfo;
+@class NMFMarker;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ `NMCClusterer`에서 노출하는 마커 객체를 관리하는 인터페이스.
+
+ 마커가 지도에 처음 노출되면 `retainMarker:` 메서드가 호출되며, 더 이상 노출되지 않으면
+ `releaseMarker:` 메서드가 호출됩니다.
+
+ @see `NMCComplexBuilder.markerManager`
+ */
+NMF_EXPORT
+@protocol NMCMarkerManager
+
+/**
+ `info`를 노출할 마커 객체를 반환합니다.
+
+ @param info 노출이 필요한 `NMCMarkerInfo` 객체.
+ @return 노출할 `NMFMarker` 객체
+ */
+- (NMFMarker * _Nullable)retainMarker:(NMCMarkerInfo * _Nonnull)info;
+
+/**
+ 더 이상 노출되지 않는 `info`의 `marker`를 정리합니다.
+
+ @param info 더 이상 노출되지 않는 `NMCMarkerInfo` 객체.
+ @param marker 더 이상 노출되지 않는 `NMFMarker` 객체.
+ */
+- (void)releaseMarker:(NMCMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCNode.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCNode.h
new file mode 100644
index 00000000..4ea1e943
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCNode.h
@@ -0,0 +1,49 @@
+#import "NMFFoundation.h"
+
+@class NMGLatLng;
+@class NMGWebMercatorCoord;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ `NMCClusterer`가 관리하는 트리 구조의 노드를 의미하는 클래스.
+
+ 이 클래스의 인스턴스는 모든 스레드에서 접근 가능하고 불변인 `NMCMarkerInfo`와 달리 백그라운드 스레드에서만 접근
+ 가능하며 데이터가 변경되면 객체의 속성도 변경되므로 사용에 주의해야 합니다.
+ */
+NMF_EXPORT
+@interface NMCNode : NSObject
+
+/**
+ 태그.
+ */
+@property (nonatomic, nullable, readonly) NSObject *tag;
+
+/**
+ 노드가 노출되어야 하는 최소 줌 레벨.
+ */
+@property (nonatomic, assign, readonly) NSInteger minZoom;
+
+/**
+ 노드가 노출되어야 하는 최대 줌 레벨.
+ */
+@property (nonatomic, assign, readonly) NSInteger maxZoom;
+
+/**
+ 자식 `NMCNode`의 개수.
+ */
+@property (nonatomic, assign, readonly) NSInteger size;
+
+/**
+ 웹 메르카토르 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord;
+
+/**
+ 좌표.
+ */
+@property (nonatomic, nonnull, readonly) NMGLatLng *position;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCPositioningStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCPositioningStrategy.h
new file mode 100644
index 00000000..c62447b1
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCPositioningStrategy.h
@@ -0,0 +1,29 @@
+#import "NMFFoundation.h"
+
+@class NMGWebMercatorCoord;
+@class NMCCluster;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 한 `cluster`의 좌표를 정하는 전략에 대한 인터페이스.
+
+ `NMCNode`가 하나의 `NMCCluster`를 이루거나, 한 `NMCCluster`의 자식 노드가 변경되면
+ `getPosition:` 메서드가 호출되며, 이 메서드에서 반환한 값이 이 `NMCCluster`의 좌표가 됩니다.
+ 따라서 이 메서드 내에서 `NMCCluster.tag` 또는 `NMCCluster.children`을 호출해 태그나 자식 노드의
+ 좌표 등 정보를 가져와 적절한 좌표를 반환하도록 구현해야 합니다.
+ */
+NMF_EXPORT
+@protocol NMCPositioningStrategy
+
+/**
+ `cluster`의 좌표를 반환합니다.
+
+ @param cluster 좌표를 구해야 하는 `cluster` 객체.
+ @return 웹 메르카토르 좌표.
+ */
+- (NMGWebMercatorCoord * _Nonnull)getPosition:(NMCCluster * _Nonnull)cluster;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCTagMergeStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCTagMergeStrategy.h
new file mode 100644
index 00000000..d9f086d1
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCTagMergeStrategy.h
@@ -0,0 +1,29 @@
+#import "NMFFoundation.h"
+
+@class NMCCluster;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 부모 `NMCCluster`의 자식 `NMCNode`들의 태그를 병합하는 전략에 대한 인터페이스.
+
+ 여러 `NMCNode`가 하나의 `NMCCluster`로 합쳐지면 `mergeTag:` 메서드가 호출되며, 이 메서드에서
+ 반환한 값이 부모 `NMCCluster`의 태그가 됩니다. 따라서 이 메서드 내에서 `NMCCluster.children`을 호출해
+ 자식 `NMCNode`의 태그를 순회하고 병합해 반환하도록 구현해야 합니다.
+
+ @see `NMCComplexBuilder.tagMergeStrategy`
+ */
+NMF_EXPORT
+@protocol NMCTagMergeStrategy
+
+/**
+ `NMCCluster`에 속한 `NMCNode`의 태그를 병합해 반환합니다.
+
+ @param cluster 태그를 병합할 `cluster` 객체.
+ @return 병합된 `cluster`의 태그.
+ */
+- (NSObject * _Nullable)mergeTag:(NMCCluster * _Nonnull)cluster;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCThresholdStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCThresholdStrategy.h
new file mode 100644
index 00000000..0e9cb13f
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCThresholdStrategy.h
@@ -0,0 +1,29 @@
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 두 `NMCNode`를 클러스터링할 기준 거리를 구하는 전략에 대한 인터페이스.
+
+ 이 전략은`NMCDistanceStrategy`와 밀접하게 연관되어 있습니다. 두 노드 `node1`, `node2`가
+ 있을 때, `NMCDistanceStrategy.getDistance:Node1:Node2`가 반환한 둘 간의 거리가 `getThreshold:`가
+ 반환한 기준 거리보다 작거나 같으면 두 노드는`zoom` 레벨에서 클러스터링됩니다.
+
+ @see `NMCComplexBuilder.distanceStrategy`
+ @see `NMCComplexBuilder.thresholdStrategy`
+ @see `NMCThresholdStrategy.getThreshold:`
+ */
+NMF_EXPORT
+@protocol NMCThresholdStrategy
+
+/**
+ 줌 레벨이 `zoom`일 때 두 `NMCNode`를 클러스터링할 기준 거리를 반환합니다.
+
+ @param zoom 기준 거리를 구할 줌 레벨.
+ @return 클러스터링할 기준 거리.
+ */
+- (double)getThreshold:(NSInteger)zoom;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFArrowheadPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFArrowheadPath.h
new file mode 100644
index 00000000..be637757
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFArrowheadPath.h
@@ -0,0 +1,79 @@
+#import
+
+#import "NMFOverlay.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 화살표 경로 오버레이 전역 Z 인덱스
+ */
+const static int NMF_ARROWHEAD_PATH_OVERLAY_GLOBAL_Z_INDEX = 100000;
+
+@class NMGLatLng;
+
+/**
+ 화살표 형태로 방향 또는 회전 지점을 나타내는 오버레이. 경로선 오버레이와 마찬가지로 좌표열을 나타내지만 진척률을
+ 지정할 수 없고, 끝 지점에 삼각형 모양의 머리가 추가됩니다.
+ */
+NMF_EXPORT
+@interface NMFArrowheadPath : NMFOverlay
+
+/**
+ 색상.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property(nonatomic, strong) UIColor *color;
+
+/**
+ 외곽선의 색상. 외곽선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의
+ 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property(nonatomic, strong) UIColor *outlineColor;
+
+/**
+ 좌표열. `points`의 크기는 `2` 이상이어야 합니다.
+ */
+@property(nonatomic, strong) NSArray *points;
+
+/**
+ 두께. pt 단위.
+
+ 기본값은 `5`입니다.
+ */
+@property(nonatomic) CGFloat width;
+
+/**
+ 외곽선의 두께. pt 단위.
+
+ 기본값은 `1`입니다.
+ */
+@property(nonatomic) CGFloat outlineWidth;
+
+/**
+ 머리 크기의 배율을 반환합니다. 두께에 배율을 곱한 값이 머리의 크기가 됩니다.
+
+ 기본값은 `2.5`입니다.
+ */
+@property(nonatomic) CGFloat headSizeRatio;
+
+/**
+ 높이. pt 단위.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) CGFloat elevation;
+
+/**
+ 좌표열을 지정하여 화살표 오버레이를 생성합니다. `points`의 크기는 `2` 이상이어야 합니다.
+
+ @param points 좌표열.
+ @return `NMFArrowheadPath` 객체.
+ */
++ (nullable instancetype)arrowheadPathWith:(NSArray*)points;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFAuthManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFAuthManager.h
new file mode 100644
index 00000000..b144c19a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFAuthManager.h
@@ -0,0 +1,72 @@
+
+#import
+
+/**
+ 네이버 클라우드 플랫폼 지도 API 인증 상태.
+ */
+typedef NS_ENUM(NSInteger, NMFAuthState) {
+ /** 인증되지 않음. */
+ NMFAuthStateUnauthorized = 0,
+ /** 인증 진행 중. */
+ NMFAuthStateAuthorizing,
+ /** 인증 대기 중. */
+ NMFAuthStatePending,
+ /** 인증 완료. */
+ NMFAuthStateAuthorized
+};
+
+/**
+ 인증 결과를 받는 델리게이트 프로토콜.
+ */
+@protocol NMFAuthManagerDelegate
+
+/**
+ 인증이 성공했을 때 호출되는 콜백 메서드.
+
+ @param state 인증 결과. 인증 결과는 `NMFAuthManager`에 저장됩니다.
+ @param error 인증 결과가 실패일 때만 `NSError`가 지정됩니다.
+ */
+- (void)authorized:(NMFAuthState)state error:(nullable NSError *)error;
+
+@end
+
+/**
+ 인증 관리 기능을 담당하는 클래스. 이 클래스는 싱글턴으로, `shared`를
+ 이용해 인스턴스를 가져올 수 있습니다.
+
+ 네이버 지도 SDK를 사용하려면 반드시 클라이언트를 설정하고 인증 및 초기화를 수행해야 합니다. 클라이언트를
+ 설정하는 방법에는 두 가지가 있습니다.
+
+ - 앱의 info.plist에 `NMFClientId`를 String으로 지정합니다.
+ - 싱글턴 객체인 `shared`에서 `clientId`를 명시적으로 지정합니다.
+ */
+NMF_EXPORT
+@interface NMFAuthManager : NSObject
+
+/**
+ NMFMapView를 사용하기 위한 API 인증 매니저 싱글턴.
+ */
++ (nonnull instancetype)shared;
+
+/**
+ 인증 결과를 받는 델리게이트 속성.
+ */
+@property(nonatomic, nullable, weak) id delegate;
+
+/**
+ 네이버 클라우드 플랫폼 인증을 위한 클라이언트 ID.
+ */
+@property(nonatomic, nullable) NSString *clientId;
+
+/**
+ 공공기관용 네이버 클라우드 플랫폼 인증을 위한 클라이언트 ID.
+ */
+@property(nonatomic, nullable) NSString *govClientId;
+
+/**
+ API 인증 상태.
+ */
+@property(nonatomic, readonly) NMFAuthState authState;
+
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraCommon.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraCommon.h
new file mode 100644
index 00000000..a350a2bf
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraCommon.h
@@ -0,0 +1,56 @@
+#ifndef NMFCameraCommon_h
+#define NMFCameraCommon_h
+
+#import
+#import
+#import
+#import "NMFGeometry.h"
+
+/**
+ 지도에서 표현할 수 있는 최소 줌 레벨.
+ */
+const static double NMF_MIN_ZOOM = 0.0;
+
+/**
+ 지도에서 표현할 수 있는 최대 줌 레벨.
+ */
+const static double NMF_MAX_ZOOM = 21.0;
+
+/**
+ 지도에서 표현할 수 있는 최소 기울기 각도.
+ */
+const static double NMF_MINIMUM_TILT = 0.0;
+
+/**
+ 지도에서 표현할 수 있는 최대 기울기 각도.
+ */
+const static double NMF_MAXIMUM_TILT = 63.0;
+
+/**
+ 기본 최대 기울기 각도.
+ */
+const static double NMF_DEFAULT_MAXIMUM_TILT = 60.0;
+
+/**
+ 기본 애니메이션 시간을 의미하는 상수. 애니메이션 시간이 이 값으로 지정되었을 경우
+ `NMFMapView.animationDuration`으로 지정된 시간이 적용됩니다.
+ */
+const static NSTimeInterval NMF_DEFAULT_ANIMATION_DURATION = -1;
+
+#define DEFAULT_INVALID_HEADING -1
+#define DEFAULT_INVALID_ZOOM -1
+#define DEFAULT_INVALID_TILT -1
+
+#define CLAMP(x, low, high) ({\
+__typeof__(x) __x = (x); \
+__typeof__(low) __low = (low);\
+__typeof__(high) __high = (high);\
+__x > __high ? __high : (__x < __low ? __low : __x);\
+})
+
+#define WRAP(value, min, max) \
+(fmod((fmod((value - min), (max - min)) + (max - min)), (max - min)) + min)
+
+#endif /* NMFCameraCommon_h */
+
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraPosition.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraPosition.h
new file mode 100644
index 00000000..0e7a43b3
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraPosition.h
@@ -0,0 +1,66 @@
+#import
+
+#import "NMFFoundation.h"
+
+@class NMGLatLng;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 카메라의 위치 관련 정보를 나타내는 불변 클래스. 카메라의 위치는 좌표, 줌 레벨, 기울기 각도, 헤딩 각도로 구성됩니다.
+ */
+NMF_EXPORT
+@interface NMFCameraPosition : NSObject
+
+/**
+ 카메라의 좌표.
+ */
+@property (nonatomic, strong, readonly) NMGLatLng *target;
+
+/**
+ 줌 레벨. 이 값이 증가할수록 축척이 증가합니다.
+ */
+@property (nonatomic, readonly) double zoom;
+
+/**
+ 기울기 각도. 도 단위. 카메라가 지면을 내려다보는 각도를 나타냅니다. 천정에서 지면을 수직으로 내려다보는 경우 `0`도이며, 비스듬해질수록 값이 증가합니다.
+ */
+@property (nonatomic, readonly) double tilt;
+
+/**
+ 헤딩 각도. 도 단위. 카메라가 바라보는 방위를 나타냅니다. 방위가 북쪽일 경우 `0`도이며, 시계 방향으로 값이 증가합니다.
+ */
+@property (nonatomic, readonly) double heading;
+
+/**
+ 카메라 위치에 관한 모든 요소를 지정해 객체를 생성합니다.
+
+ @param target 카메라의 좌표.
+ @param zoom 카메라의 줌 레벨.
+ @param tilt 카메라의 기울기 각도.
+ @param heading 카메라의 베어링 각도.
+
+ @return `NMFCameraPosition` 객체.
+ */
++ (instancetype)cameraPosition:(NMGLatLng *)target zoom:(double)zoom tilt:(double)tilt heading:(double)heading;
+
+/**
+ 좌표와 줌 레벨로부터 객체를 생성합니다. `tilt`와 `heading`은 `0`으로 지정됩니다.
+
+ @param target 카메라의 좌표.
+ @param zoom 카메라의 줌 레벨.
+
+ @return `NMFCameraPosition` 객체.
+ */
++ (instancetype)cameraPosition:(NMGLatLng *)target zoom:(double)zoom;
+
+/**
+ 카메라의 위치가 유효한지 여부를 반환합니다.
+
+ @return 카메라의 위치가 유효한지 여부.
+ */
+- (BOOL)isValid;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdate.h
new file mode 100644
index 00000000..8cf8e15e
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdate.h
@@ -0,0 +1,222 @@
+#import
+#import
+#import
+
+#import "NMFFoundation.h"
+
+@class NMFCameraUpdateParams;
+@class NMFCameraPosition;
+@class NMFMapView;
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 개발자가 API를 호출해 카메라가 움직였음을 나타내는 값.
+ @see `NMFCameraUpdate.reason`
+ */
+const static NSInteger NMFMapChangedByDeveloper = 0;
+
+/**
+ 사용자의 제스처로 인해 카메라가 움직였음을 나타내는 값.
+ @see `NMFCameraUpdate.reason`
+ */
+const static NSInteger NMFMapChangedByGesture = -1;
+
+/**
+ 사용자의 버튼 선택으로 인해 카메라가 움직였음을 나타내는 값.
+ @see `NMFCameraUpdate.reason`
+ */
+const static NSInteger NMFMapChangedByControl = -2;
+
+/**
+ 위치 정보 갱신으로 카메라가 움직였음을 나타내는 값.
+ @see `NMFCameraUpdate.reason`
+ */
+const static NSInteger NMFMapChangedByLocation = -3;
+
+/**
+ * 카메라 이동 애니메이션 유형을 정의하는 열거형. `NMFCameraUpdate`에서 사용합니다.
+ */
+typedef NS_ENUM(NSUInteger, NMFCameraUpdateAnimation) {
+ /**
+ 애니메이션 없음.
+ */
+ NMFCameraUpdateAnimationNone,
+
+ /**
+ 선형 애니메이션.
+ */
+ NMFCameraUpdateAnimationLinear,
+
+ /**
+ 부드럽게 가속되는 애니메이션.
+ */
+ NMFCameraUpdateAnimationEaseIn,
+
+ /**
+ 부드럽게 감속되는 애니메이션.
+ */
+ NMFCameraUpdateAnimationEaseOut,
+
+ /**
+ 플라잉 애니메이션. 가속과 함께 축소됐다가 감속과 함께 확대됩니다.
+ */
+ NMFCameraUpdateAnimationFly,
+};
+
+/**
+ 지도를 바라보는 카메라의 이동을 정의하는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없고, 팩토리 메서드를 이용해서
+ 생성할 수 있습니다. 생성한 인스턴스를 파라미터로 삼아 `NMFMapView`의 `-moveCamera:`를 호출하면 지도를
+ 이동할 수 있습니다.
+
+ 카메라의 이동은 다음과 같은 네 가지 요소로 구성됩니다.
+ - 카메라의 위치: 카메라를 이동할 위치. `CameraUpdate`를 생성하는 팩토리 메서드의 파라미터로 지정합니다.
+ - 피봇 지점: 카메라 이동의 기준점이 되는 지점. 피봇 지점을 지정하면 이동, 줌 레벨 변경, 회전의 기준점이 해당 지점이 됩니다. `pivot`으로 지정합니다.
+ - 애니메이션: 카메라 이동 시 적용될 애니메이션. 애니메이션의 유형과 시간을 지정할 수 있습니다. `animation`과 `animationDuration`으로 지정합니다.
+ - 이동 원인: 카메라 이동의 원인. 이 값을 지정하면 `NMFMapViewCameraDelegate`의 메서드에 `reason` 파라미터로 전달됩니다. `reason`으로 지정합니다.
+ @see `NMFMapView` `-moveCamera:`
+ */
+NMF_EXPORT
+@interface NMFCameraUpdate : NSObject
+
+/**
+ 피봇 지점. `0, 0`일 경우 왼쪽 위, `1, 1`일 경우 오른쪽 아래 지점을 의미합니다.
+ `-cameraUpdateWithFitBounds:`를 이용해 객체를 생성한 경우에는 무시됩니다.
+ */
+@property (nonatomic) CGPoint pivot;
+
+/**
+ 카메라 이동 시 적용할 애니메이션. 애니메이션의 시간은 `DEFAULT_ANIMATION_DURATION`으로 지정됩니다.
+ `animation`이 `NMFCameraUpdateAnimationNone`일 경우 지도가 애니메이션 없이 즉시 이동됩니다.
+ @see `NMFCameraUpdateAnimation`
+ */
+@property (nonatomic) NMFCameraUpdateAnimation animation;
+
+/**
+ 카메라 이동 시 적용할 애니메이션의 시간.
+
+ 기본값은 `NMFMapView.animationDuration`입니다.
+ */
+@property (nonatomic) NSTimeInterval animationDuration;
+
+/**
+ 카메라 이동의 원인.
+
+ 기본값은 `NMFMapChangedByDeveloper`입니다.
+ @see `NMFMapChangedByControl` `NMFMapChangedByGesture` `NMFMapChangedByDeveloper`
+ */
+@property (nonatomic) int reason;
+
+/**
+ `params`를 이용해 카메라를 이동하는 `NMFCameraUpdate` 객체를 생성합니다.
+
+ @param params 카메라 이동에 사용할 파라미터.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithParams:(NMFCameraUpdateParams *)params;
+
+/**
+ 카메라를 `position` 위치로 이동하는 `NMFCameraUpdate` 객체를 생성합니다.
+
+ @param position 새로운 카메라 위치.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithPosition:(NMFCameraPosition *)position;
+
+/**
+ 카메라의 좌표를 `target`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 줌 레벨, 기울기 각도, 헤딩 각도 등 좌표 외의 다른 속성은 변하지 않습니다.
+
+ @param target 새로운 카메라 좌표.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithScrollTo:(NMGLatLng *)target;
+
+/**
+ 카메라의 좌표를 `target`으로, 줌 레벨을 `zoom`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 기울기 각도, 헤딩 각도 등 좌표와 줌 레벨 외의 다른 속성은 변하지 않습니다.
+
+ @param target 새로운 카메라 좌표.
+ @param zoom 새로운 카메라 줌 레벨.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithScrollTo:(NMGLatLng *)target zoomTo:(double)zoom;
+
+/**
+ 카메라를 현재 위치에서 `delta` 포인트만큼 이동하도록 지정하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 줌 레벨, 기울기 각도, 헤딩 각도 등 좌표 외의 다른 속성은 변하지 않습니다.
+
+ @param delta 이동할 거리. pt 단위.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithScrollBy:(CGPoint)delta;
+
+/**
+ 카메라의 줌 레벨을 `1`만큼 증가하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다.
+
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithZoomIn;
+
+/**
+ 카메라의 줌 레벨을 `1`만큼 감소하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다.
+
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithZoomOut;
+
+/**
+ 카메라의 줌 레벨을 `zoom`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다.
+
+ @param zoom 새로운 카메라 줌 레벨.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithZoomTo:(double)zoom;
+
+/**
+ 카메라의 헤딩 각도를 `heading`로 변경하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 좌표, 기울기 각도, 줌 레벨 등 헤딩 각도 외의 다른 속성은 변하지 않습니다.
+
+ @param heading 새로운 카메라 헤딩 각도.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithHeading:(double)heading;
+
+/**
+ `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다.
+
+ @param bounds 카메라로 볼 영역.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds;
+
+/**
+ `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다.
+
+ @param bounds 카메라로 볼 영역.
+ @param padding 카메라가 변경된 후 영역과 지도 화면 간 확보할 최소 여백. pt 단위.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds padding:(CGFloat)padding;
+
+/**
+ `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다.
+ 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다.
+
+ @param bounds 카메라로 볼 영역.
+ @param paddingInsets 카메라가 변경된 후 영역과 지도 화면 간 확보할 인셋 여백. pt 단위.
+ @return `NMFCameraUpdate` 객체.
+ */
++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds paddingInsets:(UIEdgeInsets)paddingInsets;
+
+@end
+
+
+NS_ASSUME_NONNULL_END
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdateParams.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdateParams.h
new file mode 100644
index 00000000..e03728d6
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdateParams.h
@@ -0,0 +1,106 @@
+
+#import
+
+@class NMFCameraPosition;
+@class NMFMapView;
+@class NMGLatLng;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 카메라를 이동할 지점에 관한 다양한 정보를 나타내는 클래스. 주로 `NMFCameraUpdate`를 만들기 위한 파라미터로 사용됩니다.
+ `target`, `zoom`, `tilt`, `heading` 등 카메라 위치에 대한 네 가지 속성을 나타내는 것은 `NMFCameraPosition`과 유사하지만,
+ `NMFCameraPosition`은 하나의 절대적인 카메라 위치를 나타내는 데 반해 `NMFCameraUpdateParams`는 상대적인 변화를 줄 수 있습니다.
+ 이를 위해서 하나의 속성에 각각 두 종류의 메서드를 제공합니다.
+
+ - `xxxTo:`: 속성을 절대적인 값으로 지정합니다.
+ - `xxxBy:`: 속성을 현재 지도의 `cameraPosition`의 상대적인 값으로 지정합니다.
+
+ 동일한 속성에 대해 `xxxTo:` 계열의 메서드와 `xxxBy:` 계열의 메서드를 모두 호출하면 앞선 호출은 무시됩니다.
+
+ @see `NMFCameraUpdate.cameraUpdateWithParams:`
+ */
+NMF_EXPORT
+@interface NMFCameraUpdateParams : NSObject
+
+@property(nonatomic, readonly) bool isScrolled;
+
+/**
+ 기본 생성자.
+ */
++ (instancetype)cameraUpdateParams;
+
+- (NMFCameraPosition *)cameraPositionWithMap:(NMFMapView *)mapView pivot:(CGPoint)pivot;
+
+
+/**
+ 카메라의 좌표를 `target`으로 변경하도록 지정합니다.
+
+ @param target 지정할 좌표.
+ */
+- (void)scrollTo:(NMGLatLng *)target;
+
+/**
+ 카메라를 현재 위치에서 `delta` pt만큼 이동하도록 지정합니다.
+
+ @param delta 이동할 거리. pt 단위.
+ */
+- (void)scrollBy:(CGPoint)delta;
+
+/**
+ 카메라의 줌 레벨을 `zoom`으로 변경하도록 지정합니다.
+
+ @param zoom 지정할 줌 레벨.
+ */
+- (void)zoomTo:(double)zoom;
+
+/**
+ 카메라의 즘 레벨을 `delta`만큼 변경하도록 지정합니다. 양수로 지정할 경우 확대, 음수로 지정할 경우 축소됩니다.
+
+ @param delta 줌 레벨의 변화량.
+ */
+- (void)zoomBy:(double)delta;
+
+/**
+ 카메라의 줌 레벨을 `1`만큼 증가하도록 지정합니다.
+ */
+- (void)zoomIn;
+
+/**
+ 카메라의 줌 레벨을 `1`만큼 감소하도록 지정합니다.
+ */
+- (void)zoomOut;
+
+/**
+ 카메라의 기울기 각도를 `tilt`로 변경하도록 지정합니다.
+
+ @param tilt 기울기 각도. 도 단위.
+ */
+- (void)tiltTo:(double)tilt;
+
+/**
+ 카메라의 기울기 각도를 `delta`만큼 변경하도록 지정합니다. 양수로 지정하면 지도가 기울어지고 음수로 지정하면 수직에 가까워집니다.
+
+ @param delta 기울기 각도의 변화량. 도 단위.
+ */
+- (void)tiltBy:(double)delta;
+
+/**
+ 카메라의 헤딩 각도를 `heading`으로 변경하도록 지정합니다.
+
+ @param heading 헤딩 각도. 도 단위.
+ */
+- (void)rotateTo:(double)heading;
+
+/**
+ 카메라의 헤딩 각도를 `delta`만큼 변경하도록 지정합니다.
+
+ @param delta 헤딩 각도의 변화량. 도 단위.
+ */
+- (void)rotateBy:(double)delta;
+
+@end
+
+
+NS_ASSUME_NONNULL_END
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCircleOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCircleOverlay.h
new file mode 100644
index 00000000..daef1a0f
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCircleOverlay.h
@@ -0,0 +1,83 @@
+#import
+#import
+
+#import "NMFOverlay.h"
+
+@class NMGLatLng;
+
+/**
+ 기본 원 오버레이 전역 Z 인덱스
+ */
+const static int NMF_CIRCLE_OVERLAY_GLOBAL_Z_INDEX = -200000;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 지도에 원을 나타내는 오버레이.
+ */
+NMF_EXPORT
+@interface NMFCircleOverlay : NMFOverlay
+
+/**
+ 중심점. 원을 지도에 추가하기 전에 반드시 이 속성에 값을 지정해야 합니다.
+ */
+@property(nonatomic) NMGLatLng *center;
+
+/**
+ 반경. 미터 단위. 반경이 `0`일 경우 오버레이가 그려지지 않습니다.
+
+ 기본값은 `1000`입니다.
+ */
+@property(nonatomic) double radius;
+
+/**
+ 오버레이가 차지하는 영역.
+
+ 기본값은 빈(`isEmpty`가 `YES`인) 영역입니다.
+*/
+@property(nonatomic, readonly) NMGLatLngBounds *bounds;
+
+/**
+ 색상.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property(nonatomic, copy) UIColor *fillColor;
+
+/**
+ 테두리의 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) double outlineWidth;
+
+/**
+ 테두리의 색상.
+
+ 기본값은 `UIColor.blackColor`입니다.
+*/
+@property(nonatomic, copy) UIColor *outlineColor;
+
+/**
+ 중심점과 반경을 지정해서 원 오버레이를 생성합니다.
+
+ @param center 중심점.
+ @param radius 원의 반경. 미터 단위.
+ @return `NMFCircleOverlay` 객체.
+ */
++ (instancetype)circleOverlay:(NMGLatLng *)center radius:(double)radius;
+
+/**
+ 중심점, 반경, 색상을 지정해서 원 오버레이를 생성합니다.
+
+ @param center 중심점.
+ @param radius 반경. 미터 단위.
+ @param fillColor 색상.
+ @return `NMFCircleOverlay` 객체.
+ */
++ (instancetype)circleOverlay:(NMGLatLng *)center
+ radius:(double)radius
+ fillColor:(UIColor *)fillColor;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCompassView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCompassView.h
new file mode 100644
index 00000000..561aa0f7
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCompassView.h
@@ -0,0 +1,28 @@
+#import
+
+#import "NMFFoundation.h"
+
+#define COMPASSVIEW_DEFAULT_SIZE 50
+#define COMPASSVIEW_DEFAULT_HEADING 0.0
+#define COMPASSVIEW_DEFAULT_TILTING 0.0
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFMapView;
+
+/**
+ 나침반 컨트롤.
+ */
+NMF_EXPORT
+@interface NMFCompassView : UIImageView
+
+/**
+ 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다.
+
+ 기본값은 `nil`입니다.
+ */
+@property (nonatomic, weak, nullable) NMFMapView *mapView;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFFoundation.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFFoundation.h
new file mode 100644
index 00000000..c2a02a80
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFFoundation.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#import
+
+#define NMF_EXPORT __attribute__((visibility ("default")))
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGeometry.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGeometry.h
new file mode 100644
index 00000000..2700012d
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGeometry.h
@@ -0,0 +1,149 @@
+#import
+#import
+#import
+#import
+
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** Defines the area spanned by an `NMFCoordinateBounds`. */
+typedef struct __attribute__((objc_boxable)) NMFCoordinateSpan {
+ /** Latitudes spanned by an `NMFCoordinateBounds`. */
+ CLLocationDegrees latitudeDelta;
+ /** Longitudes spanned by an `NMFCoordinateBounds`. */
+ CLLocationDegrees longitudeDelta;
+} NMFCoordinateSpan;
+
+/* Defines a point on the map in Mercator projection for a specific zoom level. */
+typedef struct __attribute__((objc_boxable)) NMFMapPoint {
+ /** X coordinate representing a longitude in Mercator projection. */
+ CGFloat x;
+ /** Y coordinate representing a latitide in Mercator projection. */
+ CGFloat y;
+ /** Zoom level at which the X and Y coordinates are valid. */
+ CGFloat zoomLevel;
+} NMFMapPoint;
+
+/* Defines a 4x4 matrix. */
+typedef struct NMFMatrix4 {
+ double m00, m01, m02, m03;
+ double m10, m11, m12, m13;
+ double m20, m21, m22, m23;
+ double m30, m31, m32, m33;
+} NMFMatrix4;
+
+
+/**
+ Creates a new `NMFCoordinateSpan` from the given latitudinal and longitudinal
+ deltas.
+ */
+NS_INLINE NMFCoordinateSpan NMFCoordinateSpanMake(CLLocationDegrees latitudeDelta, CLLocationDegrees longitudeDelta) {
+ NMFCoordinateSpan span;
+ span.latitudeDelta = latitudeDelta;
+ span.longitudeDelta = longitudeDelta;
+ return span;
+}
+
+/**
+ Creates a new `NMFMapPoint` from the given X and Y coordinates, and zoom level.
+ */
+NS_INLINE NMFMapPoint NMFMapPointMake(CGFloat x, CGFloat y, CGFloat zoomLevel) {
+ NMFMapPoint point;
+ point.x = x;
+ point.y = y;
+ point.zoomLevel = zoomLevel;
+ return point;
+}
+
+/**
+ Returns `YES` if the two coordinate spans represent the same latitudinal change
+ and the same longitudinal change.
+ */
+NS_INLINE BOOL NMFCoordinateSpanEqualToCoordinateSpan(NMFCoordinateSpan span1, NMFCoordinateSpan span2) {
+ return (span1.latitudeDelta == span2.latitudeDelta &&
+ span1.longitudeDelta == span2.longitudeDelta);
+}
+
+/** An area of zero width and zero height. */
+extern NMF_EXPORT const NMFCoordinateSpan NMFCoordinateSpanZero;
+
+/**
+ A quadrilateral area as measured on a two-dimensional map projection.
+ `NMFCoordinateQuad` differs from `NMFCoordinateBounds` in that it allows
+ representation of non-axis aligned bounds and non-rectangular quadrilaterals.
+ The coordinates are described in counter clockwise order from top left.
+ */
+@interface NMFCoordinateQuad : NSObject
+/** Coordinate at the top left corner. */
+@property(nonatomic) NMGLatLng *topLeft;
+/** Coordinate at the bottom left corner. */
+@property(nonatomic) NMGLatLng *bottomLeft;
+/** Coordinate at the bottom right corner. */
+@property(nonatomic) NMGLatLng *bottomRight;
+/** Coordinate at the top right corner. */
+@property(nonatomic) NMGLatLng *topRight;
+
+/**
+ Creates a new `NMFCoordinateQuad` structure from the given top left,
+ bottom left, bottom right, and top right coordinates.
+ */
++ (nonnull instancetype)coordinateQuadWithtopLeft:(NMGLatLng *)topLeft bottomLeftlng:(NMGLatLng *)bottomLeftlng bottomRight:(NMGLatLng *)bottomRight topRight:(NMGLatLng *)topRight;
+
+/**
+ Creates a new `NMFCoordinateQuad` structure from the given `NMFCoordinateBounds`.
+ The returned quad uses the bounds' northeast coordinate as the top right, and the
+ southwest coordinate at the bottom left.
+ */
+static inline NMFCoordinateQuad * _Nonnull NMFCoordinateQuadMakeFromLatLngBounds(NMGLatLngBounds *bounds);
+
+@end
+
+/** Returns the area spanned by the coordinate bounds. */
+NS_INLINE NMFCoordinateSpan NMFCoordinateBoundsGetCoordinateSpan(NMGLatLngBounds *bounds) {
+ return NMFCoordinateSpanMake(bounds.latSpan, bounds.lngSpan);
+}
+
+/**
+ Returns a coordinate bounds with southwest and northeast coordinates that are
+ offset from those of the source bounds.
+ */
+NS_INLINE NMGLatLngBounds* NMFCoordinateBoundsOffset(NMGLatLngBounds *bounds, NMFCoordinateSpan offset) {
+ NMGLatLngBounds *offsetBounds = NMGLatLngBoundsMake(bounds.southWestLat, bounds.southWestLng, bounds.northEastLat, bounds.northEastLng);
+ offsetBounds.southWest.lat += offset.latitudeDelta;
+ offsetBounds.southWest.lng += offset.longitudeDelta;
+ offsetBounds.northEast.lat += offset.latitudeDelta;
+ offsetBounds.northEast.lng += offset.longitudeDelta;
+ return offsetBounds;
+}
+
+/** Returns a formatted string for the given coordinate bounds. */
+NS_INLINE NSString *NMFStringFromCoordinateBounds(NMGLatLngBounds *bounds) {
+ return [NSString stringWithFormat:@"{ sw = {%.1f, %.1f}, ne = {%.1f, %.1f}}",
+ bounds.southWestLat, bounds.southWestLng,
+ bounds.northEastLat, bounds.northEastLng];
+}
+
+/** Returns a formatted string for the given coordinate quad. */
+NS_INLINE NSString *NMFStringFromCoordinateQuad(NMFCoordinateQuad *quad) {
+ return [NSString stringWithFormat:@"{ topleft = {%.1f, %.1f}, bottomleft = {%.1f, %.1f}}, bottomright = {%.1f, %.1f}, topright = {%.1f, %.1f}",
+ quad.topLeft.lat, quad.topLeft.lng,
+ quad.bottomLeft.lat, quad.bottomLeft.lng,
+ quad.bottomRight.lat, quad.bottomRight.lng,
+ quad.topRight.lat, quad.topRight.lng];
+}
+
+/** Returns radians, converted from degrees. */
+NS_INLINE CGFloat NMFRadiansFromDegrees(CLLocationDegrees degrees) {
+ return (CGFloat)(degrees * M_PI) / 180;
+}
+
+/** Returns degrees, converted from radians. */
+NS_INLINE CLLocationDegrees NMFDegreesFromRadians(CGFloat radians) {
+ return radians * 180 / M_PI;
+}
+
+/** Returns Mercator projection of a WGS84 coordinate at the specified zoom level. */
+extern NMF_EXPORT NMFMapPoint NMFMapPointForLatLng(NMGLatLng *coordinate, double zoomLevel);
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGroundOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGroundOverlay.h
new file mode 100644
index 00000000..6575e0a0
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGroundOverlay.h
@@ -0,0 +1,54 @@
+#import
+#import
+
+#import "NMFGeometry.h"
+#import "NMFOverlay.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 지상 오버레이 전역 Z 인덱스
+ */
+const static int NMF_GROUND_OVERLAY_GLOBAL_Z_INDEX = -300000;
+
+@class NMFOverlayImage;
+@class NMGLatLngBounds;
+
+/**
+ 지도에서 특정 영역을 나타내는 오버레이. 지도에 추가하기 전에 반드시 `bounds` 및
+ `overlayImage`를 지정해야 합니다.
+ */
+NMF_EXPORT
+@interface NMFGroundOverlay : NMFOverlay
+
+/**
+ 영역. 지상 오버레이가 지도에 추가되기 전에 반드시 이 속성을 지정해야 합니다.
+
+ 기본값은 빈(`isEmpty`가 `YES`인) 영역입니다.
+ */
+@property(nonatomic, strong) NMGLatLngBounds *bounds;
+
+/**
+ 이미지.
+ */
+@property(nonatomic, strong) NMFOverlayImage *overlayImage;
+
+/**
+ 불투명도. `0`일 경우 완전히 투명, `1`일 경우 완전히 불투명함을 의미합니다.
+
+ 기본값은 `1`입니다.
+ */
+@property(nonatomic) CGFloat alpha;
+
+/**
+ 영역과 이미지를 지정하여 지상 오버레이를 생성합니다.
+
+ @param bounds 영역.
+ @param overlayImage 이미지.
+ @return `NMFGroundOverlay` 객체.
+ */
++ (instancetype)groundOverlayWithBounds:(NMGLatLngBounds *)bounds image:(NMFOverlayImage *)overlayImage;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevel.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevel.h
new file mode 100644
index 00000000..e421cef2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevel.h
@@ -0,0 +1,51 @@
+#import "NMFIndoorView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 하나의 실내지도 층을 나타내는 불변 클래스. 하나의 실내지도 층은 다른 층과 연결될 수 있습니다. 이 클래스의 인스턴스는
+ 직접 생성할 수 없고 `NMFIndoorZone`을 이용해서 가져올 수 있습니다.
+
+ @see `NMFIndoorZone`
+ */
+NMF_EXPORT
+@interface NMFIndoorLevel : NSObject
+
+/**
+ 층에 해당하는 실내지도 뷰.
+ */
+@property(nonatomic, readonly) NMFIndoorView *_Nonnull indoorView;
+
+/**
+ 층의 명칭.
+ */
+@property(nonatomic, readonly) NSString *_Nonnull name;
+
+/**
+ 연결된 층의 실내지도 뷰 목록.
+ */
+@property(nonatomic, readonly) NSArray *_Nonnull connections;
+
++ (NMFIndoorLevel *_Nonnull)indoorLevel:(NSString *_Nonnull)zoneId
+ LevelId:(NSString *_Nonnull)levelId
+ Name:(NSString *_Nonnull)name
+ Connections:(NSArray *_Nonnull)connections;
+
+/**
+ 연결된 층 중 구역 ID가 `zoneId`인 실내지도 뷰의 인덱스를 반환합니다.
+
+ @param zoneId 구역 ID.
+ @return 실내지도 뷰의 인덱스. 연결된 층 중에 ID가 `zoneId`인 층이 없을 경우 `-1`.
+ */
+- (NSInteger)getConnectionIndex:(NSString *_Nonnull)zoneId;
+
+/**
+ 연결된 층 중 구역 ID가 `zoneId`인 실내지도 뷰를 반환합니다.
+
+ @param zoneId 구역 ID.
+ @return 실내지도 뷰. 연결된 층 중에 ID가 `zoneId`인 층이 없을 경우 `nil`.
+ */
+- (NMFIndoorView *_Nullable)getConnection:(NSString *_Nonnull)zoneId;
+
+@end
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h
new file mode 100644
index 00000000..2cc13f9e
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h
@@ -0,0 +1,29 @@
+#import
+
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFIndoorSelection;
+@class NMFMapView;
+
+/**
+ 실내지도 층 피커 컨트롤.
+ */
+NMF_EXPORT
+@interface NMFIndoorLevelPickerView : UIView
+/**
+ 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다.
+
+ 기본값은 `nil`입니다.
+ */
+@property (nonatomic, weak, nullable) NMFMapView *mapView;
+
+/**
+ 실내지도 층 피커의 높이에 대한 NSLayoutConstraint 객체.
+*/
+@property (nonatomic, weak) IBOutlet NSLayoutConstraint *viewHeightConstraint;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorRegion.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorRegion.h
new file mode 100644
index 00000000..38018166
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorRegion.h
@@ -0,0 +1,38 @@
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFIndoorZone;
+
+/**
+ 실내지도가 존재하는 영역을 나타내는 불변 클래스. 하나의 실내지도 영역은 서로 겹쳐진 한 개 이상의 구역으로 이루어집니다.
+ 이 클래스의 인스턴스는 직접 생성할 수 없습니다.
+ */
+NMF_EXPORT
+@interface NMFIndoorRegion : NSObject
+
+/**
+ 영역에 속해 있는 구역 목록
+ */
+@property(nonatomic, readonly) NSArray *zones;
+
++ (NMFIndoorRegion *)indoorRegion:(NSArray *)zones;
+
+/**
+ 영역에 속해 있는 구역 중 ID가 `zoneId`인 구역의 인덱스를 반환합니다.
+
+ @param zoneId 구역 ID.
+ @return 구역의 인덱스. 영역 내에 ID가 `zoneId`인 구역이 없을 경우 `-1`.
+ */
+- (NSInteger)getZoneIndex:(NSString *)zoneId;
+
+/**
+ 영역에 속해 있는 구역 중 ID가 `zoneId`인 구역을 반환합니다.
+
+ @param zoneId 구역 ID.
+ @return 구역 객체. 영역 내에 ID가 `zoneId`인 구역이 없을 경우 `nil`.
+ */
+- (NMFIndoorZone *_Nullable)getZone:(NSString *)zoneId;
+
+@end
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelection.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelection.h
new file mode 100644
index 00000000..c6f41521
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelection.h
@@ -0,0 +1,49 @@
+#import "NMFFoundation.h"
+
+@class NMFIndoorRegion;
+@class NMFIndoorZone;
+@class NMFIndoorLevel;
+
+/**
+ 하나의 실내지도 영역 내에서 선택된 구역 및 층을 나타내는 불변 클래스.
+ */
+NMF_EXPORT
+@interface NMFIndoorSelection : NSObject
+
+/**
+ 선택된 구역의 영역.
+ */
+@property(nonatomic, readonly, nonnull) NMFIndoorRegion *region;
+
+/**
+ 선택된 구역의 인덱스.
+ */
+@property(nonatomic, readonly) NSInteger zoneIndex;
+
+/**
+ 선택된 구역.
+ */
+@property(nonatomic, readonly, nonnull) NMFIndoorZone *zone;
+
+/**
+ 선택된 층의 인덱스.
+ */
+@property(nonatomic, readonly) NSInteger levelIndex;
+
+/**
+ 선택된 층.
+ */
+@property(nonatomic, readonly, nonnull) NMFIndoorLevel *level;
+
+/**
+ 실내지도 영역 객체와 선택된 구역의 인덱스 및 층의 인덱스를 사용하는 생성자.
+
+ @param region 실내지도 영역.
+ @param zoneIndex 선택된 구역의 인덱스.
+ @param levelIndex 선택된 층의 인덱스.
+ */
++(instancetype _Nonnull)indoorSelectionWithRegion:(NMFIndoorRegion * _Nonnull)region
+ ZoneIndex:(NSInteger)zoneIndex
+ LevelIndex:(NSInteger)levelIndex;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h
new file mode 100644
index 00000000..abec0f55
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h
@@ -0,0 +1,21 @@
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFIndoorSelection;
+
+/**
+ 실내 지도 구역 및 층 선택에 대한 콜백 프로토콜.
+ */
+@protocol NMFIndoorSelectionDelegate
+
+/**
+ 선택된 실내지도 구역 및 층이 변경될 경우 호출됩니다.
+
+ @param indoorSelection 선택된 실내지도에 대한 `NMFIndoorSelection` 객체. 실내지도가 보이지 않을 경우 `nil`.
+ */
+- (void)indoorSelectionDidChanged:(NMFIndoorSelection * _Nullable)indoorSelection;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorView.h
new file mode 100644
index 00000000..4852ab4e
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorView.h
@@ -0,0 +1,33 @@
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 하나의 실내지도를 나타내는 불변 클래스.
+ */
+NMF_EXPORT
+@interface NMFIndoorView : NSObject
+
+/**
+ 구역 ID.
+ */
+@property(nonatomic, readonly) NSString *zoneId;
+
+/**
+ 층 ID.
+ */
+@property(nonatomic, readonly) NSString *levelId;
+
+@property(nonatomic, readonly) NSUInteger hash;
+
+/**
+ 구역 ID와 층 ID로 객체를 생성하는 생성자.
+
+ @param zoneId 구역 ID.
+ @param levelId 층 ID.
+ */
++ (NMFIndoorView *)indoorView:(NSString *)zoneId
+ WithLevelId:(NSString *)levelId;
+
+@end
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorZone.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorZone.h
new file mode 100644
index 00000000..d205229b
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorZone.h
@@ -0,0 +1,61 @@
+#import "NMFFoundation.h"
+
+@class NMFIndoorLevel;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 하나의 실내지도 구역을 나타내는 불변 클래스. 하나의 실내지도 구역에는 한 개 이상의 층이 있습니다. 이 클래스의
+ 인스턴스는 직접 생성할 수 없고 `NMFIndoorRegion`을 이용해서 가져올 수 있습니다.
+
+ @see `NMFIndoorRegion`
+ */
+NMF_EXPORT
+@interface NMFIndoorZone : NSObject
+
+/**
+ 구역 ID.
+ */
+@property(nonatomic, readonly) NSString *zoneId;
+
+/**
+ 대표 층의 인덱스.
+ */
+@property(nonatomic, readonly) NSInteger defaultLevelIndex;
+
+/**
+ 층 목록.
+ */
+@property(nonatomic, readonly) NSArray *levels;
+
+@property(nonatomic, readonly) NSUInteger hash;
+
++ (NMFIndoorZone *)indoorZone:(NSString *)zoneId
+ defaultLevelIndex:(NSInteger)defaultLevelIndex
+ Levels:(NSArray *)levels;
+
+/**
+ 구역에 속한 층 중 ID가 `levelId`인 층의 인덱스를 반환합니다.
+
+ @param levelId 층 ID.
+ @return 층의 인덱스. 구역 내에 ID가 `levelId`인 층이 없을 경우 `-1`.
+ */
+- (NSInteger)getLevelIndex:(NSString *)levelId;
+
+/**
+ 구역에 속한 층 중 ID가 `levelId`인 층을 반환합니다.
+
+ @param levelId 층 ID.
+ @return 층 객체. 구역 내에 ID가 `levelId`인 층이 없을 경우 `nil`.
+ */
+- (NMFIndoorLevel *_Nullable)getLevel:(NSString *)levelId;
+
+/**
+ 대표 층을 반환합니다.
+
+ @return 대표 층.
+ */
+- (NMFIndoorLevel *_Nonnull)getDefaultLevel;
+
+@end
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindow.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindow.h
new file mode 100644
index 00000000..06e69df5
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindow.h
@@ -0,0 +1,139 @@
+#import
+#import
+
+#import "NMFOverlay.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 정보창 전역 Z 인덱스
+ */
+const static int NMF_INFO_WINDOW_GLOBAL_Z_INDEX = 400000;
+
+@class NMGLatLng;
+@class NMFMarker;
+@protocol NMFOverlayImageDataSource;
+
+/**
+ 지도의 특정 지점 또는 마커 위에 열 수 있는 정보 창. 정보 창은 이미지로 특정 지점을 표시한다는 점에서 마커와 유사하나,
+ 다음과 같은 차이가 있습니다.
+ - 마커처럼 특정 좌표에 열 수 있을 뿐만 아니라 다른 마커 위에도 열 수 있습니다.
+ - 고정된 이미지를 지정하는 마커와 달리 이미지를 반환하는 어댑터를 지정할 수 있으므로, 객체/상황별로 다른 이미지를
+ 노출할 수 있습니다.
+ */
+NMF_EXPORT
+@interface NMFInfoWindow : NMFOverlay
+
+/**
+ 불투명도. `0`일 경우 완전히 투명, `1`일 경우
+ 완전히 불투명함을 의미합니다.
+
+ 기본값은 `1`입니다.
+ */
+@property(nonatomic) CGFloat alpha;
+
+/**
+ 정보 창에서 사용할 이미지를 제공해 줄 수 있는 이미지 데이터 소스.
+ */
+@property(nonatomic) id dataSource;
+
+/**
+ 정보 창이 열려 있는 마커.
+ */
+@property(nonatomic, nullable, readonly) NMFMarker *marker;
+
+/**
+ 좌표. 좌표는 `-openWithMapView:`를 이용해 정보 창을 여는 경우 사용되며, `-openWithMarker:`를
+ 이용해 여는 경우에는 마커의 위치에 정보 창이 열리므로 무시됩니다.
+
+ 기본값은 유효하지 않은(`isValid`가 `NO`인) 좌표입니다.
+ */
+@property(nonatomic) NMGLatLng *position;
+
+/**
+ 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 정보 창의 좌표에
+ 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 이미지의 왼쪽 위,
+ `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다.
+
+ 기본값은 `(0.5, 1)`입니다.
+ */
+@property(nonatomic) CGPoint anchor;
+
+/**
+ 정보 창과 좌표 또는 마커 간의 X축 방향 여백. pt 단위.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) NSInteger offsetX;
+
+/**
+ 정보 창과 좌표 또는 마커 간의 Y축 방향 여백. pt 단위.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) NSInteger offsetY;
+
+/**
+ 정보 창을 생성합니다.
+
+ @return `NMFInfoWindow` 객체.
+ */
++ (instancetype)infoWindow;
+
+/**
+ 정보 창을 `marker`의 위에 엽니다. `-openWithMarker:marker alignType:NMFAlignType.top`과 동일합니다.
+
+ 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다.
+
+ @param marker 정보 창을 열 마커.
+ */
+- (void)openWithMarker:(NMFMarker *)marker;
+
+/**
+ 정보 창을 `marker`에 엽니다. 정보 창을 열 마커는 반드시 지도에 추가된 상태여야 하며, 그렇지 않을 경우
+ 무시됩니다. `align`을 이용하면 마커의 어느 방향에 정보 창의 앵커를 위치시킬지 지정할 수 있습니다.
+
+ 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다.
+
+ @param marker 정보 창을 열 마커.
+ @param align 정보 창을 열 방향.
+
+ @warning Deprecated. `openWithMarker:alignType:`을 사용하세요.
+ */
+- (void)openWithMarker:(NMFMarker *)marker align:(NMFAlign)align __deprecated_msg("Use `openWithMarker:alignType:` instead.");
+
+/**
+ 정보 창을 `marker`에 엽니다. 정보 창을 열 마커는 반드시 지도에 추가된 상태여야 하며, 그렇지 않을 경우
+ 무시됩니다. `alignType`을 이용하면 마커의 어느 방향에 정보 창의 앵커를 위치시킬지 지정할 수 있습니다.
+
+ 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다.
+
+ @param marker 정보 창을 열 마커.
+ @param alignType 정보 창을 열 방향.
+
+ @see `NMFAlignType`
+ */
+- (void)openWithMarker:(NMFMarker *)marker alignType:(NMFAlignType *)alignType;
+
+/**
+ 정보 창을 `position` 지점에 엽니다.
+
+ 정보 창을 특정 지점에 열기 전에는 반드시 `position`과 `dataSource`를 지정해야 합니다.
+
+ @param mapView 정보 창을 열 지도 객체.
+ */
+- (void)openWithMapView:(NMFMapView *)mapView;
+
+/**
+ 정보 창을 닫습니다. 정보 창이 열려 있지 않은 경우 무시됩니다.
+ */
+- (void)close;
+
+/**
+ 이미지를 다시 그립니다.
+ */
+- (void)invalidate;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h
new file mode 100644
index 00000000..e26a1a21
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h
@@ -0,0 +1,20 @@
+#import "NMFOverlayImage.h"
+
+#import
+
+#import "NMFFoundation.h"
+
+@protocol NMFOverlayImageDataSource;
+
+NS_ASSUME_NONNULL_BEGIN
+
+NMF_EXPORT
+@interface NMFInfoWindowDefaultTextSource : NSObject
+
++ (instancetype)dataSource;
+
+@property(nonatomic, readwrite) NSString *title;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationButton.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationButton.h
new file mode 100644
index 00000000..8ef8d7b2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationButton.h
@@ -0,0 +1,23 @@
+#import
+
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFMapView;
+
+/**
+ 현위치 버튼 컨트롤.
+ */
+NMF_EXPORT
+@interface NMFLocationButton : UIButton
+/**
+ 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다.
+
+ 기본값은 `nil`입니다.
+ */
+@property (nonatomic, weak, nullable) NMFMapView *mapView;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationManager.h
new file mode 100644
index 00000000..1f937fe3
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationManager.h
@@ -0,0 +1,52 @@
+#import
+
+#import "NMFFoundation.h"
+
+@class NMGLatLng;
+@protocol NMFLocationManagerDelegate;
+
+NMF_EXPORT
+@interface NMFLocationManager : NSObject
+
+@property (nonatomic, getter=isUpdatingLocation) BOOL updatingLocation;
+@property (nonatomic, getter=isUpdatingHeading) BOOL updatingHeading;
+
++ (NMFLocationManager *)sharedInstance;
+
+- (void)addDelegate:(id)delegate;
+- (void)removeDelegate:(id)delegate;
+
+- (CLAuthorizationStatus)locationUpdateAuthorization;
+
+- (void)startUpdatingLocation;
+- (void)stopUpdatingLocation;
+
+- (void)startUpdatingHeading;
+- (void)stopUpdatingHeading;
+
+- (NMGLatLng *)currentLatLng;
+
+@end
+
+@protocol NMFLocationManagerDelegate
+
+@optional
+
+// Responding to Location Events
+- (void)locationManager:(NMFLocationManager *)locationManager didUpdateLocations:(NSArray *)locations;
+- (void)locationManager:(NMFLocationManager *)locationManager didFailWithError:(NSError *)error;
+
+// Responding to Heading Events
+- (void)locationManager:(NMFLocationManager *)locationManager didUpdateHeading:(CLHeading *)newHeading;
+// Authorization Status Change
+- (void)locationManager:(NMFLocationManager *)locationManager didChangeAuthStatus:(CLAuthorizationStatus)status;
+
+- (void)locationManagerDidStartLocationUpdates:(NMFLocationManager *)locationManager;
+- (void)locationManagerDidStartHeadingUpdates:(NMFLocationManager *)locationManager;
+- (void)locationManagerBackgroundLocationUpdatesDidTimeout:(NMFLocationManager *)locationManager;
+- (void)locationManagerBackgroundLocationUpdatesDidAutomaticallyPause:(NMFLocationManager *)locationManager;
+- (void)locationManagerDidStopLocationUpdates:(NMFLocationManager *)locationManager;
+- (void)locationManagerDidStopHeadingUpdates:(NMFLocationManager *)locationManager;
+
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationOverlay.h
new file mode 100644
index 00000000..9ca3dee9
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationOverlay.h
@@ -0,0 +1,142 @@
+#import
+#import
+#import
+
+#import "NMFOverlay.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+/**
+ 너비 또는 높이가 자동임을 나타내는 상수. 너비 또는 높이가 자동일 경우 아이콘 이미지의 크기에 맞춰집니다.
+ */
+const static int NMF_LOCATION_OVERLAY_SIZE_AUTO = 0;
+
+/**
+ 위치 오버레이 기본 색상.
+ */
+extern UIColor *const NMF_LOCATION_OVERLAY_DEFAULT_COLOR;
+
+/**
+ 기본 위치 오버레이 Z 인덱스
+ */
+const static int NMF_LOCATION_OVERLAY_GLOBAL_Z_INDEX = 300000;
+
+@class NMGLatLng;
+@class NMFOverlayImage;
+
+/**
+ 사용자의 현재 위치를 나타내는 오버레이. 이 오버레이는 지도에 단 하나만 존재하며, 인스턴스를 직접 생성할 수 없고
+ `NMFMapView.locationOverlay`를 이용해서 가져올 수 있습니다.
+ 위치 오버레이는 주 아이콘과 보조 아이콘, 원으로 구성됩니다.
+ - 주 아이콘: 반드시 필요합니다. 이벤트를 받을 수 있습니다.
+ - 보조 아이콘: 생략할 수 있습니다. 주 아이콘보다 약간 아래에 그려집니다. 이벤트를 받을 수 없습니다.
+ - 원: 생략할 수 있습니다. 강조 효과를 위해 사용되며, 보조 아이콘 아래에 그려집니다. 이벤트를 받을 수 없습니다.
+ */
+NMF_EXPORT
+@interface NMFLocationOverlay : NMFOverlay
+
+/**
+ 아이콘의 너비. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다.
+
+ 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다.
+ */
+@property(nonatomic) CGFloat iconWidth;
+
+/**
+ 이미지의 높이. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 눂이를 따릅니다.
+
+ 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다.
+ */
+@property(nonatomic) CGFloat iconHeight;
+
+/**
+ 보조 아이콘의 너비. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다.
+
+ 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다.
+ */
+@property(nonatomic) CGFloat subIconWidth;
+
+/**
+ 보조 이미지의 높이. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 눂이를 따릅니다.
+
+ 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다.
+ */
+@property(nonatomic) CGFloat subIconHeight;
+
+/**
+ 오버레이의 좌표.
+ */
+@property(nonatomic, copy) NMGLatLng *location;
+
+/**
+ 방위. 도 단위. 방위가 북쪽일 경우 `0`도이며, 시계 방향으로 값이 증가합니다.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) CGFloat heading;
+/**
+ 아이콘.
+ */
+@property(nonatomic, strong) NMFOverlayImage *icon;
+/**
+ 보조 아이콘.
+ */
+@property(nonatomic, strong, nullable) NMFOverlayImage *subIcon;
+
+/**
+ 아이콘의 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이
+ 오버레이의 좌표에 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우
+ 이미지의 왼쪽 위, `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다.
+
+ 기본값은 `(0.5, 0.5)`입니다.
+ */
+@property(nonatomic) CGPoint anchor;
+
+/**
+ 보조 아이콘의 앵커. 앵커는 보조 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이
+ 오버레이의 좌표에 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우
+ 이미지의 왼쪽 위, `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다.
+
+ 기본값은 `(0.5, 1)`입니다.
+ */
+@property(nonatomic) CGPoint subAnchor;
+
+/**
+ 원의 색상.
+
+ 기본값은 `NMF_LOCATION_OVERLAY_DEFAULT_COLOR`입니다.
+ */
+@property(nonatomic, strong) UIColor *circleColor;
+
+/**
+ 원의 테두리 색상.
+
+ 기본값은 `UIColor.clearColor`입니다.
+ */
+@property(nonatomic, strong) UIColor *circleOutlineColor;
+
+/**
+ 원의 외곽선 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) CGFloat circleOutlineWidth;
+
+/**
+ 원의 반경. pt 단위. `0`일 경우 원이 그려지지 않습니다.
+
+ 기본값은 `18`입니다.
+ */
+@property(nonatomic) CGFloat circleRadius;
+
+/**
+ 유효한 현 위치의 기본 아이콘 이미지를 반환합니다.
+
+ @return `NMFOverlayImage` 객체.
+ */
++ (NMFOverlayImage *)defaultIconImage;
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h
new file mode 100644
index 00000000..e65af89e
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h
@@ -0,0 +1,47 @@
+#import
+
+@class NMFMapView;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NMFMapView (IBAdditions)
+
+// Core properties that can be manipulated in the Attributes inspector in
+// Interface Builder. These redeclarations merely add the IBInspectable keyword.
+// They appear here to ensure that they appear above the convenience properties;
+// inspectables declared in NMFMapView.h are always sorted before those in
+// NMFMapView+IBAdditions.h, due to ASCII sort order.
+
+#if TARGET_INTERFACE_BUILDER
+
+// HACK: We want this property to look like a URL bar in the Attributes
+// inspector, but just calling it styleURL would violate Cocoa naming
+// conventions and conflict with the existing NSURL property. Fortunately, IB
+// strips out the two underscores for display.
+@property (nonatomic, nullable) IBInspectable NSString *styleURL__;
+
+#endif // TARGET_INTERFACE_BUILDER
+
+// Convenience properties related to the initial viewport. These properties
+// are not meant to be used outside of Interface Builder. latitude and longitude
+// are backed by properties of type CLLocationDegrees, but these declarations
+// must use the type double because Interface Builder is unaware that
+// CLLocationDegrees is a typedef for double.
+
+@property (nonatomic) IBInspectable double latitude;
+@property (nonatomic) IBInspectable double longitude;
+@property (nonatomic) IBInspectable double zoomLevel;
+@property (nonatomic) IBInspectable double pitch;
+
+// Renamed properties. Interface Builder derives the display name of each
+// inspectable from the runtime name, but runtime names don’t always make sense
+// in UI.
+
+@property (nonatomic) IBInspectable BOOL allowsZooming;
+@property (nonatomic) IBInspectable BOOL allowsScrolling;
+@property (nonatomic) IBInspectable BOOL allowsRotating;
+@property (nonatomic) IBInspectable BOOL allowsTilting;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView.h
new file mode 100644
index 00000000..117b0439
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView.h
@@ -0,0 +1,647 @@
+#import
+#import
+
+#import "NMFGeometry.h"
+#import "NMFMyPositionMode.h"
+#import "NMFFoundation.h"
+#import "NMFTypes.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFLocationOverlay;
+@class NMFCameraPosition;
+@class NMFCameraUpdate;
+@class NMFProjection;
+@class NMFIndoorView;
+
+@protocol NMFMapViewDelegate;
+@protocol NMFMapViewTouchDelegate;
+@protocol NMFMapViewCameraDelegate;
+@protocol NMFMapViewOptionDelegate;
+@protocol NMFIndoorSelectionDelegate;
+@protocol NMFPickable;
+
+/**
+ 기본 밝은 배경색.
+ */
+extern NMF_EXPORT UIColor *const NMFDefaultBackgroundLightColor;
+
+/**
+ 기본 어두운 배경색.
+ */
+extern NMF_EXPORT UIColor *const NMFDefaultBackgroundDarkColor;
+
+/**
+ 기본 밝은 배경 이미지. 지도 로딩 전에는 `nil`일 수 있습니다.
+
+ 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView.defaultBackgroundLightImage`를 사용하세요.
+ */
+extern NMF_EXPORT UIImage * _Nullable NMFDefaultBackgroundLightImage __attribute__((deprecated("Use NMFMapView.defaultBackgroundLightImage instead")));
+
+/**
+ 기본 어두운 배경 이미지. 지도 로딩 전에는 `nil`일 수 있습니다.
+
+ 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView.defaultBackgroundDarkImage`를 사용하세요.
+ */
+extern NMF_EXPORT UIImage * _Nullable NMFDefaultBackgroundDarkImage __attribute__((deprecated("Use NMFMapView.defaultBackgroundDarkImage instead")));
+
+/**
+ 건물 레이어 그룹. 기본적으로 활성화됩니다.
+ @see `NMFMapView.setLayerGroup(:isEnabled:)`
+ */
+extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_BUILDING;
+
+/**
+ 대중교통 레이어 그룹.
+ @see `NMFMapView.setLayerGroup(:isEnabled:)`
+ */
+extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_TRANSIT;
+
+/**
+ 자전거도로 레이어 그룹.
+ @see `NMFMapView.setLayerGroup(:isEnabled:)`
+ */
+extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_BICYCLE;
+
+/**
+ 실시간 교통정보 레이어 그룹.
+ @see `NMFMapView.setLayerGroup(:isEnabled:)`
+ */
+extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_TRAFFIC;
+
+/**
+ 지적편집도 레이어 그룹.
+ @see `NMFMapView.setLayerGroup(:isEnabled:)`
+ */
+extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_CADASTRAL;
+
+/**
+ 등산로 레이어 그룹.
+ @see `NMFMapView.setLayerGroup(:isEnabled:)`
+ */
+extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_MOUNTAIN;
+
+/**
+ 지도 유형을 나타내는 열거형.
+ @see `NMFMapView.mapType`
+ */
+typedef NS_ENUM(NSInteger, NMFMapType) {
+ /** 일반 지도. */
+ NMFMapTypeBasic = 0,
+ /** 내비게이션 지도. */
+ NMFMapTypeNavi,
+ /** 위성 지도. */
+ NMFMapTypeSatellite,
+ /** 위성 지도(겹쳐보기). */
+ NMFMapTypeHybrid,
+ /** 지형도. */
+ NMFMapTypeTerrain,
+ /** 없음. 지도는 나타나지 않고 오버레이만이 나타납니다. */
+ NMFMapTypeNone,
+ /** 내비게이션용 위성 지도(겹쳐보기). */
+ NMFMapTypeNaviHybrid
+};
+
+/**
+ 지도 뷰 클래스.
+ */
+NMF_EXPORT IB_DESIGNABLE
+@interface NMFMapView : UIView
+
+/**
+ 기본 밝은 배경 이미지.
+ */
+@property (class, nonatomic, readonly, nullable) UIImage *defaultBackgroundLightImage;
+
+/**
+ 기본 어두운 배경 이미지.
+ */
+@property (class, nonatomic, readonly, nullable) UIImage *defaultBackgroundDarkImage;
+
+/**
+ 지도 인증 요청. 네트워크 오류 등의 이유로 인증을 재시도할 때 호출합니다.
+ @see `NMFAuthManager`
+ */
+- (void)authorize;
+
+#pragma mark Creating Instances
+
+/**
+ 프레임 크기로 지도 뷰의 인스턴스를 생성합니다.
+
+ @param frame 뷰의 프레임.
+ @return `NMFMapView` 인스턴스.
+ */
+- (instancetype)initWithFrame:(CGRect)frame;
+
+#pragma mark Accessing the Delegate
+
+/**
+ `NMFMapView`의 위임자. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `touchDelegate`, `addCameraDelegate`/`removeCameraDelegate`, `addOptionDelegate`/`removeOptionDelegate`를 사용하세요.
+
+ 만약 `delegate`와 `touchDelegate`가 모두 지정되면 `delegate`는 무시되고 `touchDelegate`만이 동작합니다.
+ */
+@property(nonatomic, weak, nullable) IBOutlet id delegate __attribute__((deprecated("Use touchDelegate, addCameraDelegate/removeCameraDelegate or addOptionDelegate/removeOptionDelegate")));
+
+/**
+ 지도 터치에 대한 위임자. 지도 탭, 심벌 탭 등 지도와 관련된 터치 이벤트가 전달됩니다.
+ */
+@property(nonatomic, weak, nullable) IBOutlet id touchDelegate;
+
+/**
+ 카메라의 움직임에 대한 위임자를 등록합니다.
+
+ @param delegate `NMFMapViewCameraDelegate` 객체.
+ */
+- (void)addCameraDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addCameraDelegate(delegate:));
+
+/**
+ 카메라의 움직임에 대한 위임자를 해제합니다.
+
+ @param delegate `NMFMapViewCameraDelegate` 객체.
+ */
+- (void)removeCameraDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeCameraDelegate(delegate:));
+
+/**
+ 지도 옵션 변경에 대한 위임자를 등록합니다.
+
+ @param delegate `NMFMapViewOptionDelegate` 객체.
+ */
+- (void)addOptionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addOptionDelegate(delegate:));
+
+/**
+ 지도 옵션 변경에 대한 위임자를 해제합니다.
+
+ @param delegate `NMFMapViewOptionDelegate` 객체.
+ */
+- (void)removeOptionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeOptionDelegate(delegate:));
+
+#pragma mark Configuring the Map’s Appearance
+
+/**
+ 라이트 모드를 활성화할지 여부를 지정합니다. 라이트 모드가 활성화되면 지도의 로딩이 빨라지고 메모리 소모가
+ 감소합니다. 그러나 다음과 같은 제약이 생깁니다.
+
+ - 지도의 전반적인 화질이 하락합니다.
+ - 카메라가 회전하거나 기울어지면 지도 심벌도 함께 회전하거나 기울어집니다.
+ - 줌 레벨이 커지거나 작아지면 지도 심벌도 일정 정도 함께 커지거나 작아집니다.
+ - `mapType` 지도 유형을 사용할 수 없습니다.
+ - `setLayerGroup:isEnabled:`, `getLayerGroupEnabled:`, `indoorMapEnabled`, `nightModeEnabled`, `lightness`, `buildingHeight`, `symbolScale`, `symbolPerspectiveRatio`가 동작하지 않습니다.
+ - `NMFMapViewTouchDelegate.mapView:didTapSymbol:`이 호출되지 않습니다.
+ - `NMFMarker.isHideCollidedSymbols`가 동작하지 않습니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property(nonatomic) BOOL liteModeEnabled;
+
+/**
+ 지도의 배경색. 배경은 해당 지역의 지도 데이터가 없거나 로딩 중일 때 나타납니다.
+ */
+@property (nonatomic) UIColor *backgroundColor;
+
+/**
+ 지도의 배경 이미지. 배경은 해당 지역의 지도 데이터가 없거나 로딩 중일 때 나타납니다.
+ */
+@property (nonatomic, nullable) UIImage *backgroundImage;
+
+/**
+ 지도의 패딩. 패딩에 해당하는 부분은 지도의 콘텐츠 영역에서 제외됩니다.
+ 이 속성을 변경하여 패딩을 지정하면 카메라의 좌표가 변경됩니다. 즉, `setContentInset:contentInset keepCamera:NO`와 동일합니다.
+*/
+@property (nonatomic, assign) UIEdgeInsets contentInset;
+
+/**
+ 지도의 패딩. 패딩에 해당하는 부분은 지도의 콘텐츠 영역에서 제외됩니다.
+
+ `keepCamera`에 따라 카메라의 좌표 또는 지도의 영역이 유지됩니다.
+ - `YES`인 경우: 카메라의 좌표를 유지하며 콘텐츠 영역을 변경합니다. 따라서 화면에 나타나는 지도의 전체 영역이 변경됩니다.
+ 카메라에 변화가 없으므로 `NMFMapViewCameraDelegate`의 메서드가 호출되지 않습니다.
+ - `NO`인 경우: 화면에 나타나는 지도의 전체 영역을 유지하며 콘텐츠 영역을 변경합니다.
+ 카메라의 좌표는 새로운 콘텐츠 영역의 중심을 가리키도록 변경되며, `NMFMapViewCameraDelegate`의 메서드가 호출됩니다.
+
+ @param contentInset 패딩.
+ @param keepCamera 카메라의 좌표를 유지할지 여부. 유지할 경우 `YES`, 그렇지 않을 경우 `NO`.
+*/
+- (void)setContentInset:(UIEdgeInsets)contentInset keepCamera:(BOOL)keepCamera;
+
+/**
+ 지도 뷰의 화면상 너비. pt 단위.
+ */
+@property (nonatomic, readonly) double mapWidth;
+
+/**
+ 지도 뷰의 화면상 높이. pt 단위.
+ */
+@property (nonatomic, readonly) double mapHeight;
+
+/**
+ 지도 유형.
+
+ 기본값은 `NMFMapTypeBasic`입니다.
+ */
+@property(nonatomic) NMFMapType mapType;
+
+/**
+ 지도가 어두운지 여부를 반환합니다. 야간 모드가 활성화되어 있거나 지도의 유형이 `NMFMapTypeSatellite`
+ 또는 `NMFMapTypeHybrid`일 경우 어두운 것으로 간주됩니다.
+
+ @return 어두울 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (BOOL)isDark;
+
+/**
+ 레이어 그룹을 활성화할지 여부를 지정합니다.
+
+ @param group 레이어 그룹의 이름.
+ @param enabled 활성화할 경우 `YES`, 그렇지 않을 경우 `NO`입니다.
+ */
+- (void)setLayerGroup:(NSString *)group isEnabled:(BOOL)enabled;
+
+/**
+ 레이어 그룹이 활성화되어 있는지 여부를 반환합니다.
+
+ @param group 레이어 그룹의 이름.
+ @return 활성화된 경우 `YES`, 그렇지 않을 경우 `NO`
+ */
+- (BOOL)getLayerGroupEnabled:(NSString *)group;
+
+/**
+ 배경의 명도 계수. 값의 범위는 `-1`~`1`.
+ 계수가 `-1`일 경우 명도 최소치인 검정색으로, `1`일 경우 명도 최대치인 흰색으로 표시됩니다. 오버레이에는 적용되지 않습니다.
+
+ 기본값 `0`입니다.
+ */
+@property(nonatomic) CGFloat lightness;
+
+/**
+ 건물의 3D 높이 배율. 값의 범위는 `0`~`1`. 배율이 `0`일 경우 지도를 기울이더라도 건물이 2D로 나타납니다.
+
+ 기본값은 `1`입니다.
+ */
+@property(nonatomic) float buildingHeight;
+
+/**
+ 야간 모드를 활성화할지 여부. 야간 모드가 활성화되면 지도 스타일이 어둡게 바뀝니다. 지도 유형이 야간
+ 모드를 지원하지 않으면 활성화하더라도 아무 변화가 일어나지 않습니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property(nonatomic, getter=isNightModeEnabled) BOOL nightModeEnabled;
+
+/**
+ 이 지도의 `NMFLocationOverlay` 객체. 항상 같은 객체를 가리킵니다.
+ */
+@property (nonatomic, strong, readonly) NMFLocationOverlay *locationOverlay;
+
+/**
+ 지도의 로캘.
+
+ 기본값은 시스템 로캘을 의미하는 `nil`입니다.
+ */
+@property (nonatomic, readwrite, nullable) NSString *locale;
+
+
+/**
+ 네이버 로고의 위치를 지정하는 열거형.
+ @see `NMFMapView.logoAlign`
+ */
+typedef NS_ENUM(NSInteger, NMFLogoAlign) {
+ /** 지도의 좌하단. */
+ NMFLogoAlignLeftBottom = 0,
+ /** 지도의 우하단. */
+ NMFLogoAlignRightBottom,
+ /** 지도의 좌상단. */
+ NMFLogoAlignLeftTop,
+ /** 지도의 우상단. */
+ NMFLogoAlignRightTop
+};
+
+/**
+ 네이버 로고의 위치를 지정합니다.
+
+ 기본값은 NMFLogoAlignLeftBottom.
+ */
+@property (nonatomic) NMFLogoAlign logoAlign;
+
+/**
+ 네이버 로고의 마진을 지정합니다.
+ */
+@property (nonatomic) UIEdgeInsets logoMargin;
+
+/**
+ 네이버 로고 클릭을 활성화할지 여부를 지정합니다. 활성화하면 네이버 로고 클릭시 범례, 법적 공지, 오픈소스
+ 라이선스를 보여주는 알림창이 열립니다.
+
+ 이 옵션을 `NO`로 지정하는 앱은 반드시 앱 내에 네이버 지도 SDK의 법적 공지
+ (`-showLegalNotice`) 및 오픈소스 라이선스(`-showOpenSourceLicense`)뷰 컨트롤러를 호출하는
+ 메뉴를 만들어야 합니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property (nonatomic) BOOL logoInteractionEnabled;
+
+/**
+ 법적 공지를 보여주는 뷰컨트롤러를 호출합니다.
+ */
+- (void)showLegalNotice;
+
+/**
+ 오픈소스 라이선스를 보여주는 뷰컨트롤러를 호출합니다.
+ */
+- (void)showOpenSourceLicense;
+
+/**
+ 지도 화면을 강제로 새로고침합니다. 실시간 교통정보 등 지도 화면에 나타나는 실시간성 데이터는 적시에 자동으로
+ 새로고침되므로 이 메서드를 별도로 호출할 필요가 없습니다.
+ */
+- (void)forceRefresh;
+
+/**
+ 지도가 렌더링되는 속도(fps, frames per second)를 설정합니다.
+
+ 기본값은 `60`입니다.
+ @see `CADisplayLink.preferredFramesPerSecond`
+ */
+@property (nonatomic, assign) double preferredFramesPerSecond;
+
+
+#pragma mark Configuring How the User Interacts with the Map
+
+/**
+ 카메라 이동 애니메이션의 기본 지속 시간. 초 단위.
+
+ 기본값은 `0.2`입니다.
+ */
+@property(nonatomic) NSTimeInterval animationDuration;
+
+/**
+ 줌 제스처가 활성화되어 있는지 여부를 나타내는 속성.
+ 활성화하면 지도를 더블 탭, 두 손가락 탭, 핀치해 카메라의 줌 레벨을 변경할 수 있습니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, getter=isZoomGestureEnabled) BOOL zoomGestureEnabled;
+
+/**
+ 스크롤 제스처가 활성화되어 있는지 여부를 나타내는 속성.
+ 활성화하면 지도를 스와이프해 카메라의 좌표를 변경할 수 있습니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, getter=isScrollGestureEnabled) BOOL scrollGestureEnabled;
+
+/**
+ 로테이트 제스처가 활성화되어 있는지 여부를 나타내는 속성.
+ 활성화되면 두 손가락으로 지도를 돌려 카메라의 베어링 각도를 변경할 수 있습니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, getter=isRotateGestureEnabled) BOOL rotateGestureEnabled;
+
+/**
+ 틸트 제스처가 활성화되어 있는지 여부를 나타내는 속성.
+ 활성화되면 지도를 두 손가락으로 세로 스와이프해 카메라의 틸트 각도를 변경할 수 있습니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, getter=isTiltGestureEnabled) BOOL tiltGestureEnabled;
+
+/**
+ 스톱 제스처가 활성화되어 있는지 여부를 나타내는 속성.
+ 활성화되면 지도 애니메이션 진행 중 탭으로 지도 애니메이션을 중지할 수 있습니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, getter=isStopGestureEnabled) BOOL stopGestureEnabled;
+
+/**
+ 스크롤 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다.
+
+ 기본값은 `0.088`입니다.
+ */
+@property(nonatomic) CGFloat scrollFriction;
+
+/**
+ 줌 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다.
+
+ 기본값은 `0.12375`입니다.
+ */
+@property(nonatomic) CGFloat zoomFriction;
+
+/**
+ 회전 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다.
+
+ 기본값은 `0.19333`입니다.
+ */
+@property(nonatomic) CGFloat rotateFriction;
+
+/**
+ 지도 클릭 시 피킹되는 `NMFPickable`의 클릭 허용 반경. pt 단위. 사용자가 지도를 클릭했을 때, 클릭된 지점이 `NMFPickable`의
+ 영역 내에 존재하지 않더라도 허용 반경 내에 있다면 해당 요소가 클릭된 것으로 간주됩니다.
+
+ 기본값은 `2`입니다.
+ */
+@property(nonatomic) NSInteger pickTolerance;
+
+
+#pragma mark Indoor
+
+
+/**
+ 실내지도 활성화 여부. 활성화하면 카메라가 일정 크기 이상 확대되고 실내지도가 있는 영역에 포커스될 경우 자동으로 해당 영역의 실내지도가 나타납니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property(nonatomic, getter=isIndoorMapEnabled) BOOL indoorMapEnabled;
+
+/**
+ 실내지도 영역의 포커스 유지 반경. pt 단위. 지정할 경우 카메라의 위치가 포커스 유지 반경을 완전히 벗어날 때까지 영역에 대한 포커스가 유지됩니다.
+
+ 기본값은 `20`입니다.
+ */
+@property(nonatomic) double indoorFocusRadius;
+
+/**
+ 실내 지도에 대한 위임자를 등록합니다.
+
+ @param delegate `NMFIndoorSelectionDelegate` 객체.
+ */
+- (void)addIndoorSelectionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addIndoorSelectionDelegate(delegate:));
+
+/**
+ 실내 지도에 대한 위임자를 해제합니다.
+
+ @param delegate `NMFIndoorSelectionDelegate` 객체.
+ */
+- (void)removeIndoorSelectionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeIndoorSelectionDelegate(delegate:));
+
+/**
+ 실내지도 뷰를 나타내도록 요청합니다. 이 메서드를 호출하더라도 실내지도 뷰가 즉시 나타나는 것이 보장되지 않으며,
+ 요청된 실내지도 뷰를 포함하는 영역이 포커스되어야 그 뷰가 나타납니다. 단, 요청된 실내지도 뷰를 포함하는 영역이
+ 이미 포커스되어 있을 경우 즉시 그 뷰가 나타납니다.
+
+ @param indoorView 실내지도 뷰. 요청을 취소할 경우 `nil`.
+ */
+- (void)requestIndoorView:(NMFIndoorView * _Nullable)indoorView;
+
+
+
+#pragma mark Manipulating the Viewpoint
+
+/**
+ 지도의 최소 줌 레벨.
+
+ 기본값은 `0`입니다.
+ */
+@property (nonatomic) double minZoomLevel;
+
+/**
+ 지도의 최대 줌 레벨.
+
+ 기본값은 `20`입니다.
+ */
+@property (nonatomic) double maxZoomLevel;
+
+/**
+ 지도의 최대 기울기 각도.
+
+ 기본값은 `60`입니다.
+ */
+@property (nonatomic) double maxTilt;
+
+
+/**
+ 지도의 제한 영역.
+
+ 기본값은 제한이 없음을 의미하는 `nil`입니다.
+ */
+@property (nonatomic, nullable) NMGLatLngBounds *extent;
+
+/**
+ 지도의 콘텐츠 영역 중심에 대한 카메라 위치.
+ */
+@property (nonatomic, copy, readonly) NMFCameraPosition *cameraPosition;
+
+/**
+ 지도의 콘텐츠 영역에 대한 `NMGLatLngBounds`. 콘텐츠 패딩이 모두 `0`이면 `coveringBounds`와 동일한 영역이,
+ 콘텐츠 패딩이 지정되어 있으면 `coveringBounds`에서 콘텐츠 패딩을 제외한 영역이 반환됩니다.
+ */
+@property (nonatomic, readonly, copy) NMGLatLngBounds *contentBounds;
+
+/**
+ 지도의 콘텐츠 영역에 대한 폴리곤 객체. 콘텐츠 패딩이 모두 `0`이면 `coveringRegion`과 동일한 폴리곤이,
+ 콘텐츠 패딩이 지정되어 있으면 `coveringRegion`에서 콘텐츠 패딩을 제외한 폴리곤이 반환됩니다.
+ */
+@property (nonatomic, copy, readonly) NMGPolygon *contentRegion;
+
+/**
+ 콘텐츠 패딩을 포함한 지도의 뷰 전체 영역에 대한 `NMGLatLngBounds`.
+ */
+@property (nonatomic, readonly, copy) NMGLatLngBounds *coveringBounds;
+
+/**
+ 콘텐츠 패딩을 포함한 지도의 뷰 전체 영역에 대한 폴리곤 객체.
+ */
+@property (nonatomic, copy, readonly) NMGPolygon *coveringRegion;
+
+/**
+ 콘텐츠 패딩을 포함한 지도의 뷰 전체를 완전히 덮는 타일 ID의 목록을 반환합니다.
+
+ @return 타일 ID의 목록.
+ @see NMFTileId
+ */
+- (NSArray *)getCoveringTileIds;
+
+/**
+ 콘텐츠 패딩을 포함한 지도의 뷰 전체를 완전히 덮는 `zoom` 레벨 타일 ID의 목록을 반환합니다.
+
+ @param zoom 줌 레벨.
+ @return 타일 ID의 목록.
+ @see NMFTileId
+ */
+- (NSArray *)getCoveringTileIdsAtZoom:(NSInteger)zoom;
+
+/**
+ 이 지도에 대한 `NMFProjection` 객체. 항상 같은 객체가 반환됩니다.
+ */
+@property (nonatomic, readonly) NMFProjection *projection;
+
+/**
+ 카메라를 이동합니다. 만약 지도 이동 애니메이션이 진행 중이었다면 취소되고, 진행 중인 `NMFCameraUpdate`의 취소 콜백 블록이 호출됩니다.
+
+ @param cameraUpdate `NMFCameraUpdate` 객체.
+ */
+- (void)moveCamera:(NMFCameraUpdate *)cameraUpdate;
+
+/**
+ 카메라를 이동합니다. 만약 지도 이동 애니메이션이 진행 중이었다면 취소되고, 진행 중인 `NMFCameraUpdate`의 취소 콜백 블록이 호출됩니다.
+ 카메라 이동이 완료되거나 취소되었을 경우 `completion` 블록이 호출됩니다.
+
+ @param cameraUpdate `NMFCameraUpdate` 객체.
+ @param completion 카메라 이동이 완료되었을 때 호출되는 콜백 블록. 애니메이션이 있으면 완전히 끝난 후에 호출됩니다.
+ `isCancelled`는 카메라 이동이 완료되기 전에 다른 카메라 이동이 호출되거나 사용자가 제스처로 지도를 조작한 경우 `YES`입니다.
+ */
+- (void)moveCamera:(NMFCameraUpdate *)cameraUpdate completion:(nullable void (^)(bool isCancelled))completion;
+
+/**
+ 현재 진행 중인 지도 이동 애니메이션을 취소합니다.
+ */
+- (void)cancelTransitions;
+
+/**
+ 현재 진행 중인 지도 이동 애니메이션을 취소합니다.
+
+ @param reason 취소의 원인.
+ */
+- (void)cancelTransitions:(NSInteger)reason;
+
+/**
+ 위치 추적 모드.
+
+ `NMFMyPositionMode` 객체.
+ */
+@property(nonatomic) NMFMyPositionMode positionMode;
+
+#pragma mark Symbol
+
+/**
+ 지도를 기울일 때 적용되는 심벌의 원근 계수. 계수가 `1`일 경우 배경 지도와 동일한 비율로 멀리 있는
+ 심벌은 작아지고 가까이 있는 심벌은 커지며, `0`에 가까울수록 원근 효과가 감소합니다.
+
+ 기본값은 `1`입니다.
+ */
+@property (nonatomic) CGFloat symbolPerspectiveRatio;
+
+/**
+ 심벌의 크기 배율. 배율이 `0.5`일 경우 절반, `2`일 경우 두 배의 크기로 표시됩니다.
+
+ 기본값은 `1`입니다.
+ */
+@property (nonatomic) CGFloat symbolScale;
+
+
+#pragma mark Pickable Query
+
+/**
+ 특정 화면 좌표 주변 `tolerance` 내에 나타난 모든 오버레이 및 심벌을 가져옵니다. 목록은 가장 위에
+ 그려진 요소부터 가장 아래에 그려진 요소의 순으로 정렬됩니다.
+
+ @param point 화면 좌표.
+ @param tolerance point를 기준으로 한 반경. pt 단위.
+ @return 오버레이 및 심벌의 목록. point 주변 tolerance pt 내에 존재하는 오버레이 또는 심벌이 없을 경우 빈 목록.
+ */
+- (NSArray> *)pickAll:(CGPoint)point withTolerance:(NSInteger)tolerance;
+
+/**
+ 특정 화면 좌표에 나타난 모든 오버레이 및 심벌을 가져옵니다. 목록은 가장 위에 그려진 요소부터 가장 아래에 그려진 요소의 순으로 정렬됩니다.
+ `pickAll(point, 0)`과 동일합니다.
+
+ @param point 화면 좌표.
+ @return 오버레이 또는 심벌. point에 존재하는 오버레이 또는 심벌이 없을 경우 nil.
+ */
+- (nullable id)pick:(CGPoint)point;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h
new file mode 100644
index 00000000..eb9ab792
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h
@@ -0,0 +1,53 @@
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFMapView;
+@class NMFSymbol;
+
+/**
+ 카메라의 움직임에 대한 콜백 프로토콜.
+*/
+@protocol NMFMapViewCameraDelegate
+
+@optional
+/**
+ 카메라의 움직임이 시작될 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다.
+
+ @param mapView `NMFMapView` 객체.
+ @param reason 움직임의 원인.
+ @param animated 애니메이션 효과가 적용돼 움직일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ */
+- (void)mapView:(NMFMapView *)mapView cameraWillChangeByReason:(NSInteger)reason animated:(BOOL)animated;
+
+/**
+ 카메라가 움직이고 있을 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다.
+
+ @param mapView `NMFMapView` 객체.
+ @param reason 움직임의 원인.
+ */
+- (void)mapView:(NMFMapView *)mapView cameraIsChangingByReason:(NSInteger)reason;
+
+/**
+ 카메라의 움직임이 끝났을 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다.
+
+ @param mapView `NMFMapView` 객체.
+ @param reason 움직임의 원인.
+ @param animated 애니메이션 효과가 적용돼 움직인 경우 `YES`, 그렇지 않은 경우 `NO`.
+ */
+- (void)mapView:(NMFMapView *)mapView cameraDidChangeByReason:(NSInteger)reason animated:(BOOL)animated;
+
+/**
+ 카메라의 움직임이 끝나면 호출되는 콜백 메서드. 이 메서드는 다음과 같은 경우에 호출됩니다.
+ 카메라가 애니메이션 없이 움직일 때. 단, 사용자가 제스처로 지도를 움직이는 경우 제스처가 완전히 끝날 때까지(터치가 끝날 때까지) 연속적인 이동으로 간주되어 이벤트가 발생하지 않습니다.
+ 카메라 애니메이션이 완료될 때. 단, 카메라 애니메이션이 진행 중일 때 새로운 애니메이션이 발생하거나, 기존 `NMFMapView.moveCamera:completion:`의 콜백 내에서 카메라 이동이 일어날 경우 연속적인 이동으로 간주되어 이벤트가 발생하지 않습니다.
+ `NMFMapView.cancelTransitions()`가 호출되어 카메라 애니메이션이 명시적으로 취소될 때.
+ 해당 시점의 카메라 위치는 콜백 내에서 `mapView.cameraPosition`으로 얻을 수 있습니다.
+
+ @param mapView `NMFMapView` 객체.
+ */
+- (void)mapViewCameraIdle:(NMFMapView *)mapView;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewDelegate.h
new file mode 100644
index 00000000..60972f00
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewDelegate.h
@@ -0,0 +1,83 @@
+#import
+
+#import "NMFTypes.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFMapView;
+@class NMFSymbol;
+@class NMFIndoorRegion;
+
+/**
+ `NMFMapView`에 관련된 업데이트 및 비동기 작업의 결과를 알려주는 콜백 메서드가 정의된 프로토콜. 이 프로토콜은 더이상 사용이 권장되지 않습니다. `NMFMapViewTouchDelegate`, `NMFMapViewCameraDelegate`, `NMFMapViewOptionDelegate`를 사용하세요.
+ */
+__attribute__((deprecated("Use NMFMapViewTouchDelegate, NMFMapViewCameraDelegate or NMFMapViewOptionDelegate")))
+@protocol NMFMapViewDelegate
+
+@optional
+
+#pragma mark Responding to Map Position Changes
+
+/**
+ 지도가 표시하는 영역이 변경될 때 호출되는 콜백 메서드.
+
+ @param mapView 영역이 변경될 `NMFMapView` 객체.
+ @param animated 애니메이션 효과가 적용돼 움직일 경우 `YES`, 그렇지 않을 경우 `NO`.
+ @param reason 움직임의 원인.
+ */
+- (void)mapView:(NMFMapView *)mapView regionWillChangeAnimated:(BOOL)animated byReason:(NSInteger)reason;
+
+/**
+ 지도가 표시하고 있는 영역이 변경되고 있을 때 호출되는 콜백 메서드.
+
+ @param mapView 영역이 변경되고 있는 `NMFMapView` 객체.
+ @param reason 움직임의 원인.
+ */
+- (void)mapViewRegionIsChanging:(NMFMapView *)mapView byReason:(NSInteger)reason;
+
+/**
+ 지도가 표시하고 있는 영역이 변경되었을 때 호출되는 콜백 메서드.
+
+ @param mapView 영역이 변경된 `NMFMapView` 객체.
+ @param animated 애니메이션 효과가 적용돼 움직인 경우 `YES`, 그렇지 않은 경우 `NO`.
+ @param reason 움직임의 원인.
+ */
+- (void)mapView:(NMFMapView *)mapView regionDidChangeAnimated:(BOOL)animated byReason:(NSInteger)reason;
+
+/**
+ 현재 진행 중인 지도 이동 애니메이션이 취소되었을때 호출되는 콜백 메서드.
+
+ @param mapView 영역이 변경되고 있었던 `NMFMapView` 객체.
+ @param reason 취소된 원인.
+ */
+- (void)mapViewCameraUpdateCancel:(NMFMapView *)mapView byReason:(NSInteger)reason;
+
+/**
+ 지도가 표시하고 있는 영역이 변경된 후 진행 중인 터치 이벤트가 없을 때 호출되는 콜백 메서드.
+
+ @param mapView 영역이 변경된 `NMFMapView` 객체.
+ */
+- (void)mapViewIdle:(NMFMapView *)mapView;
+
+#pragma mark Responding to Map TouchEvent
+
+/**
+ 사용자가 지도의 심벌을 탭하면 호출됩니다.
+
+ @param mapView `NMFMapView` 객체.
+ @param symbol 탭한 지도 심벌 객체.
+ @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 `NMFMapView`까지 이벤트가 전달되어 `NMFMapViewDelegate`의 `didTapMapView`가 호출됩니다.
+ */
+- (BOOL)mapView:(NMFMapView *)mapView didTapSymbol:(NMFSymbol *)symbol;
+
+/**
+ 사용자가 지도를 탭하면 호출됩니다.
+
+ @param point 탭한 화면 좌표.
+ @param latlng 탭한 위경도 좌표.
+ */
+- (void)didTapMapView:(CGPoint)point LatLng:(NMGLatLng*)latlng;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h
new file mode 100644
index 00000000..a28bd5e0
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h
@@ -0,0 +1,22 @@
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFMapView;
+
+/**
+ 지도 옵션 변경에 대한 콜백 프로토콜.
+ */
+@protocol NMFMapViewOptionDelegate
+
+@optional
+/**
+ 지도의 옵션이 변경되면 호출되는 콜백 메서드.
+
+ @param mapView `NMFMapView` 객체.
+ */
+- (void)mapViewOptionChanged:(NMFMapView *)mapView;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h
new file mode 100644
index 00000000..af16533d
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h
@@ -0,0 +1,34 @@
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFMapView;
+@class NMFSymbol;
+
+/**
+ 지도 터치에 대한 콜백 프로토콜.
+*/
+@protocol NMFMapViewTouchDelegate
+
+@optional
+
+/**
+ 지도 심벌이 탭되면 호출되는 콜백 메서드.
+
+ @param mapView 지도 객체.
+ @param symbol 탭된 심벌.
+ @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 이벤트가 지도로 전달되어 `mapView:didTapMap:point:`가 호출됩니다.
+ */
+- (BOOL)mapView:(NMFMapView *)mapView didTapSymbol:(NMFSymbol *)symbol;
+
+/**
+ 지도가 탭되면 호출되는 콜백 메서드.
+
+ @param latlng 탭된 지점의 지도 좌표.
+ @param point 탭된 지점의 화면 좌표.
+ */
+- (void)mapView:(NMFMapView *)mapView didTapMap:(NMGLatLng*)latlng point: (CGPoint)point;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarker.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarker.h
new file mode 100644
index 00000000..4b5331cf
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarker.h
@@ -0,0 +1,363 @@
+#import
+#import
+#import
+
+#import "NMFOverlay.h"
+#import "NMFMarkerConstants.h"
+#import "NMFInfoWindow.h"
+
+@class NMGLatLng;
+@class NMFOverlayImage;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 너비 또는 높이가 자동임을 나타내는 상수. 너비 또는 높이가 자동일 경우 아이콘 이미지의 크기에 맞춰집니다.
+ */
+const static int NMF_MARKER_SIZE_AUTO = 0;
+
+/**
+ 기본 마커 전역 Z 인덱스
+ */
+const static int NMF_MARKER_GLOBAL_Z_INDEX = 200000;
+
+/**
+ 파란색 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_BLUE;
+/**
+ 회색 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_GRAY;
+/**
+ 녹색 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_GREEN;
+/**
+ 하늘색 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_LIGHTBLUE;
+/**
+ 분홍색 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_PINK;
+/**
+ 빨간색 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_RED;
+/**
+ 노란색 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_YELLOW;
+/**
+ 검은색 마커 이미지. 색상을 덧입히기에 적합합니다.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_BLACK;
+/**
+ 기본 마커 이미지. `NMF_MARKER_IMAGE_GREEN`과 동일합니다.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_DEFAULT;
+
+/**
+ 저밀도 클러스터 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_LOW_DENSITY;
+/**
+ 중밀도 클러스터 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_MEDIUM_DENSITY;
+/**
+ 고밀도 클러스터 마커 이미지.
+ */
+extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_HIGH_DENSITY;
+
+/**
+ 기본 앵커. 가운데 아래를 가리킵니다.
+
+ @see `NMFMarker.anchor`
+ */
+extern const NMF_EXPORT CGPoint NMF_MARKER_ANCHOR_DEFAULT;
+
+/**
+ 아이콘과 캡션을 이용해 지도 위의 한 지점을 표시하는 오버레이.
+ */
+NMF_EXPORT
+@interface NMFMarker : NMFOverlay
+
+/**
+ 사용자가 임의로 지정할 수 있는 태그. 마커를 그루핑하거나 구분하기 위한 목적으로 사용할 수 있습니다.
+ */
+@property (nonatomic) NSUInteger tag;
+
+/**
+ 아이콘.
+ */
+@property (nonatomic, strong) NMFOverlayImage *iconImage;
+
+/**
+ 아이콘에 덧입힐 색상. 덧입힐 색상을 지정하면 덧입힐 색상이 아이콘 이미지의 색상과 가산 혼합됩니다. 단, 덧입힐 색상의
+ 알파는 무시됩니다.
+
+ 기본값은 `UIColor.clearColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *iconTintColor;
+
+/**
+ 아이콘의 너비. pt 단위. `NMF_MARKER_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다.
+
+ 기본값은 `NMF_MARKER_SIZE_AUTO`입니다.
+ */
+@property (nonatomic) CGFloat width;
+
+/**
+ 아이콘의 높이. pt 단위. `NMF_MARKER_SIZE_AUTO`일 경우 이미지의 높이를 따릅니다.
+
+ 기본값은 `NMF_MARKER_SIZE_AUTO`입니다.
+ */
+@property (nonatomic) CGFloat height;
+
+/**
+ 아이콘에 원근 효과를 적용할지 여부. 원근 효과를 적용할 경우 가까운 아이콘은 크게, 먼 아이콘은 작게 표시됩니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL iconPerspectiveEnabled;
+
+/**
+ 캡션에 원근 효과를 적용할지 여부. 원근 효과를 적용할 경우 가까운 캡션은 크게, 먼 캡션은 작게 표시됩니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL captionPerspectiveEnabled;
+
+/**
+ 마커를 평평하게 설정할지 여부. 마커가 평평할 경우 지도가 회전하거나 기울어지면 마커 이미지도 함께 회전하거나
+ 기울어집니다. 단, 마커가 평평하더라도 이미지의 크기는 항상 동일하게 유지됩니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic, getter=isFlat) BOOL flat;
+
+ /**
+ 마커와 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedSymbols;
+
+/**
+ 마커와 다른 마커가 겹칠 경우 다른 마커를 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedMarkers;
+
+/**
+ 마커와 다른 마커의 캡션이 겹칠 경우 다른 마커의 캡션을 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedCaptions;
+
+/**
+ 마커가 `isHideCollidedMarkers`이 `YES`인 다른 마커와 겹치더라도 아이콘을 무조건 표시할지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isForceShowIcon;
+
+/**
+ 마커가 `isHideCollidedCaptions`이 `YES`인 다른 마커와 겹치더라도 캡션을 무조건 표시할지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isForceShowCaption;
+
+/**
+ 좌표. 마커를 지도에 추가하기 전에 반드시 이 속성에 값을 지정해야 합니다.
+ */
+@property (nonatomic, strong) NMGLatLng *position;
+
+/**
+ 불투명도. `0`일 경우 완전히 투명, `1`일 경우
+ 완전히 불투명함을 의미합니다.
+
+ 기본값은 `1`입니다.
+ */
+@property (nonatomic) CGFloat alpha;
+
+/**
+ 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 정보 창의 좌표에
+ 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 이미지의 왼쪽 위,
+ `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다.
+
+ 기본값은 `(0.5, 1)`입니다.
+ */
+@property (nonatomic) CGPoint anchor;
+
+/**
+ 아이콘의 각도. 도 단위. 각도를 지정하면 아이콘이 해당 각도만큼 시계 방향으로 회전합니다.
+
+ 기본값은 `0`입니다.
+ */
+@property (nonatomic) CGFloat angle;
+
+/**
+ 캡션 텍스트. 빈 문자열일 경우 캡션이 표시되지 않습니다.
+
+ 기본값은 빈 문자열입니다.
+ */
+@property (nonatomic, copy) NSString *captionText;
+
+/**
+ 캡션의 텍스트 색상.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *captionColor;
+
+/**
+ 캡션의 외곽 색상.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *captionHaloColor;
+
+/**
+ 캡션의 텍스트 크기. pt 단위.
+
+ 기본값은 `12`입니다.
+ */
+@property(nonatomic) CGFloat captionTextSize;
+
+/**
+ 캡션의 너비. pt 단위. 지정할 경우 한 줄의 너비가 희망 너비를 초과하는 캡션 텍스트가 자동으로 개행됩니다.
+ 자동 개행은 어절 단위로 이루어지므로, 하나의 어절이 길 경우 캡션의 너비가 희망 너비를 초과할 수 있습니다.
+ `0`일 경우 너비를 제한하지 않습니다.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) CGFloat captionRequestedWidth;
+
+/**
+ 캡션이 보이는 최소 줌 레벨. 지도의 줌 레벨이 캡션의 최소 줌 레벨보다 작을 경우 아이콘만 나타나고
+ 주 캡션 및 보조 캡션은 나타나지 않습니다.
+
+ 기본값은 `NMF_MIN_ZOOM`입니다.
+ */
+@property(nonatomic) double captionMinZoom;
+
+/**
+ 캡션이 보이는 최대 줌 레벨. 지도의 줌 레벨이 캡션의 최대 줌 레벨보다 클 경우 아이콘만 나타나고
+ 주 캡션 및 보조 캡션은 나타나지 않습니다.
+
+ 기본값은 `NMF_MAX_ZOOM`입니다.
+ */
+@property(nonatomic) double captionMaxZoom;
+
+/**
+ 보조 캡션의 텍스트. 보조 캡션은 주 캡션의 아래에 나타납니다. 빈 문자열일 경우 보조 캡션이 표시되지 않습니다.
+
+ 기본값은 빈 문자열입니다.
+ */
+@property (nonatomic, copy) NSString *subCaptionText;
+
+/**
+ 보조 캡션의 텍스트 색상.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *subCaptionColor;
+
+/**
+ 보조 캡션의 외곽 색상.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *subCaptionHaloColor;
+
+/**
+ 보조 캡션의 텍스트 크기. pt 단위.
+
+ 기본값은 `12`입니다.
+ */
+@property(nonatomic) CGFloat subCaptionTextSize;
+
+/**
+ 보조 캡션의 너비. pt 단위. 지정할 경우 한 줄의 너비가 희망 너비를 초과하는 캡션 텍스트가 자동으로 개행됩니다.
+ 자동 개행은 어절 단위로 이루어지므로, 하나의 어절이 길 경우 캡션의 너비가 희망 너비를 초과할 수 있습니다.
+ `0`일 경우 너비를 제한하지 않습니다.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) CGFloat subCaptionRequestedWidth;
+
+/**
+ 보조 캡션이 보이는 최소 줌 레벨. 지도의 줌 레벨이 보조 캡션의 최소 줌 레벨보다 작을 경우 아이콘 및
+ 주 캡션만 나타나고 보조 캡션은 나타나지 않습니다.
+
+ 기본값은 `NMF_MIN_ZOOM`입니다.
+ */
+@property(nonatomic) double subCaptionMinZoom;
+
+/**
+ 보조 캡션이 보이는 최대 줌 레벨. 지도의 줌 레벨이 보조 캡션의 최대 줌 레벨보다 클 경우 아이콘 및 주
+ 캡션만 나타나고 보조 캡션은 나타나지 않습니다.
+
+ 기본값은 `NMF_MAX_ZOOM`입니다.
+ */
+@property(nonatomic) double subCaptionMaxZoom;
+
+/**
+ 캡션 아이콘의 정렬 방향.
+
+ 기본값은 `NMFAlignBottom`입니다.
+
+ @warning Deprecated. `captionAligns` 속성을 사용하세요.
+ */
+@property(nonatomic) NMFAlign captionAlign __deprecated_msg("Use `captionAligns` instead.");
+
+/**
+ 캡션을 아이콘의 어느 방향에 위치시킬지를 지정합니다. 캡션은 `captionAligns` 배열에 지정된 순서대로 우선적으로
+ 위치합니다. 만약 캡션이 다른 마커와 겹치지 않거나 겹치더라도 해당 마커의 `isHideCollidedCaptions`가
+ `NO`라면 캡션은 반드시 `captionAligns[0]`에 위치합니다. 그렇지 않을 경우 겹치지 않은 다음
+ 방향에 위치하며, 어느 방향으로 위치시켜도 다른 마커와 겹칠 경우 캡션이 숨겨집니다.
+
+ 기본값은 `NMFAlignType.bottom`입니다.
+
+ @see `NMFAlignType`
+ */
+@property(nonatomic) NSArray *captionAligns;
+
+/**
+ 아이콘과 캡션 간의 여백.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) CGFloat captionOffset;
+
+/**
+ 마커에 열려 있는 정보 창.
+*/
+@property (nonatomic, strong, nullable, readonly) NMFInfoWindow *infoWindow;
+
+/**
+ 위치를 지정하여 마커를 생성합니다.
+
+ @param position 좌표.
+ @return `NMFMarker` 객체.
+ */
++(instancetype)markerWithPosition:(NMGLatLng *)position;
+
+/**
+ 위치와 아이콘을 지정하여 마커를 생성합니다.
+
+ @param position 좌표.
+ @param iconImage 아이콘.
+ @return `NMFMarker` 객체.
+ */
++(instancetype)markerWithPosition:(NMGLatLng *)position iconImage:(NMFOverlayImage *)iconImage;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarkerConstants.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarkerConstants.h
new file mode 100644
index 00000000..6fae1624
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarkerConstants.h
@@ -0,0 +1,3 @@
+#import
+
+const static NSString *INFOWINDOW_TITLE_KEY = @"NMF_MARKER_TITLE";
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMultipartPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMultipartPath.h
new file mode 100644
index 00000000..f3d0f541
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMultipartPath.h
@@ -0,0 +1,131 @@
+#import
+#import
+
+#import "NMFOverlay.h"
+#import "NMFPathColor.h"
+
+@class NMGLineString;
+@class NMFOverlayImage;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 멀티 파트 경로선 전역 Z 인덱스
+ */
+const static int NMF_MULTI_PART_PATH_OVERLAY_GLOBAL_Z_INDEX = -100000;
+
+/**
+ 경로선을 여러 파트로 나누어 각각 다른 색상을 부여할 수 있는 특수한 `NMFPath`. 다양한 색상으로 구성된
+ 경로선을 나타내려면 여러 개의 `NMFPath`를 사용하는 것보다 이 클래스를 사용하는 것이 효율적입니다.
+ `MultipartPathOverlay`는 좌표열 파트의 목록와 색상 파트의 목록으로 구성되며, `0`번째 좌표열 파트에
+ `0`번째 색상 파트의 색상이 적용됩니다. 따라서 좌표열 파트와 색상 파트의 크기가 동일해야 합니다.
+ */
+NMF_EXPORT
+@interface NMFMultipartPath : NMFOverlay
+
+/**
+ 좌표열 파트의 목록. 목록의 크기가 `1`이상이어야 합니다.
+ */
+@property(nonatomic, strong) NSArray *lineParts;
+
+/**
+ 색상 파트의 목록. 목록의 크기가 `1` 이상, 각 파트의 크기가 `2` 이상이어야 합니다.
+ */
+@property(nonatomic, strong) NSArray *colorParts;
+
+/**
+ 두께. pt 단위.
+
+ 기본값은 `5`입니다.
+ */
+@property(nonatomic) CGFloat width;
+
+/**
+ 테두리 두께. pt 단위.
+
+ 기본값은 `1`입니다.
+ */
+@property(nonatomic) CGFloat outlineWidth;
+
+/**
+ 진척률. 값의 범위는 `-1`~`1`입니다. 경로는 진척률을 기준으로 지나온 경로와 지나갈 경로로 구분됩니다. 지나온 경로에는
+ `passedColor`와 `passedOutlineColor`가 사용되고 지나갈 경로에는 `color`와 `outlineColor`가 사용됩니다.
+
+ - 진척률을 양수로 지정하면 첫 좌표부터 진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다.
+ - 진척률을 음수로 지정하면 마지막 좌표부터 -진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다.
+ - 진척률을 `0`으로 지정하면 모든 선형이 지나갈 경로로 간주됩니다.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) double progress;
+
+/**
+ 패턴 이미지의 간격. pt 단위. `0`일 경우 패턴을 표시하지 않습니다.
+
+ 기본값은 `25`입니다.
+ */
+@property(nonatomic) NSUInteger patternInterval;
+
+/**
+ 패턴 이미지. 패턴 이미지의 크기가 경로선의 두께보다 클 경우 경로선의 두께에 맞게 축소됩니다.
+ `nil`일 경우 패턴을 표시하지 않습니다.
+
+ 기본값은 `nil`입니다.
+ */
+@property(nonatomic, strong, nullable) NMFOverlayImage *patternIcon;
+
+/**
+ 경로선과 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedSymbols;
+
+/**
+ 경로선과 마커가 겹칠 경우 마커를 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedMarkers;
+
+/**
+ 경로선과 마커의 캡션이 겹칠 경우 마커의 캡션을 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedCaptions;
+
+/**
+ 좌표열 파트의 목록을 지정하여 NMFMultipartPath 객체를 생성합니다.
+ 각 파트의 크기는 `2`이상이어야 합니다.
+
+ ```
+ NMFMultipartPath *mPath = [NMFMultipartPath multipartPathWithCoordParts:@[
+ @[NMGLatLngMake(37.20, 127.051),
+ NMGLatLngMake(37.21, 127.052),
+ NMGLatLngMake(37.22, 127.053)],
+ @[NMGLatLngMake(37.23, 127.054),
+ NMGLatLngMake(37.24, 127.055),
+ NMGLatLngMake(37.25, 127.056)]
+ ]];
+ mPath.mapView = mapView;
+ ```
+
+ @param coordParts 좌표열 파트의 목록.
+ @return `NMFMultipartPath` 객체.
+ */
++ (nullable instancetype)multipartPathWith:(NSArray *> *)coordParts;
+
+/**
+ `NMGLineString`배열을 지정하여 NMFMultipartPath 객체를 생성합니다.
+ 배열내 `NMGLineString`객체의 `isValid` 속성이 `NO`일 경우 `nil`을 리턴합니다.
+
+ @param lineParts `NMGLineString`파트의 목록.
+ @return `NMFMultipartPath` 객체.
+ */
++ (nullable instancetype)multipartPath:(NSArray *)lineParts;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMyPositionMode.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMyPositionMode.h
new file mode 100644
index 00000000..69b1c448
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMyPositionMode.h
@@ -0,0 +1,30 @@
+#import
+
+/**
+ 위치 추적 모드를 나타내는 열거형.
+ */
+typedef NS_ENUM(NSUInteger, NMFMyPositionMode) {
+ /**
+ 위치 추적을 사용하지 않는 모드. `NMFLocationOverlay`는 움직이지 않습니다.
+ */
+ NMFMyPositionDisabled = 0,
+
+ /**
+ 위치는 추적하지만 지도는 움직이지 않는 모드. `NMFLocationOverlay`가 사용자의 위치를 따라 움직이나 지도는
+ 움직이지 않습니다.
+ */
+ NMFMyPositionNormal = 1,
+
+ /**
+ 위치를 추적하면서 카메라도 따라 움직이는 모드. `NMFLocationOverlay`와 카메라의 좌표가 사용자의 위치를 따라
+ 움직입니다. API나 제스처를 사용해 지도를 임의로 움직일 경우 모드가 `NMFMyPositionNormal`로 바뀝니다.
+ */
+ NMFMyPositionDirection = 2,
+
+ /**
+ 위치를 추적하면서 카메라의 좌표와 헤딩도 따라 움직이는 모드. `NMFLocationOverlay`와 카메라의 좌표,
+ 헤딩이 사용자의 위치, 사용자가 바라보고 있는 방향을 따라 움직입니다. API나 제스처를 사용해 지도를 임의로 움직일
+ 경우 모드가 `NMFMyPositionNormal`로 바뀝니다.
+ */
+ NMFMyPositionCompass = 3
+};
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFNaverMapView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFNaverMapView.h
new file mode 100644
index 00000000..7ca516e1
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFNaverMapView.h
@@ -0,0 +1,88 @@
+#import
+
+#import "NMFFoundation.h"
+#import "NMFMyPositionMode.h"
+
+@class NMFMapView;
+
+@protocol NMFMapViewDelegate;
+
+/**
+ 지도의 컨트롤을 내장한 지도 뷰 클래스.
+ */
+NMF_EXPORT
+@interface NMFNaverMapView : UIView
+
+/**
+ 지도 뷰 객체.
+
+ @see `NMFMapView`
+ */
+@property(nonatomic, readonly, nonnull) NMFMapView *mapView;
+
+/**
+ 지도 뷰에 관련된 업데이트 및 비동기 작업의 결과를 알려주는 델리게이트. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView`의 `touchDelegate`, `addCameraDelegate`/`removeCameraDelegate`, `addOptionDelegate`/`removeOptionDelegate`를 사용하세요.
+
+ @see `NMFMapViewDelegate`
+ */
+@property(nonatomic, weak, nullable) IBOutlet id delegate __attribute__((deprecated("Use delegates of NMFMapView")));
+
+/**
+ 나침반 활성화 여부.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, assign) IBInspectable BOOL showCompass;
+
+/**
+ 축척 바 활성화 여부.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, assign) IBInspectable BOOL showScaleBar;
+
+/**
+ 줌 컨트롤 활성화 여부.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, assign) IBInspectable BOOL showZoomControls;
+
+/**
+ 실내지도 층 피커 활성화 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property(nonatomic, assign) IBInspectable BOOL showIndoorLevelPicker;
+
+/**
+ 현 위치 버튼이 활성화되어 있는지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property(nonatomic, assign) IBInspectable BOOL showLocationButton;
+
+/**
+ 위치 추적 모드. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView`의 `positionMode`를 사용하세요.
+
+ @see `NMFMyPositionMode`
+ */
+@property(nonatomic) NMFMyPositionMode positionMode __attribute__((deprecated("Use NMFMapView.positionMode")));
+
+/**
+ 현재 지도의 스냅숏을 촬영합니다. 스냅숏이 촬영되면 `complete` 가 호출됩니다.
+ `takeSnapShot:YES complete:complete` 와 동일합니다.
+
+ @param complete 지도 스냅숏이 촬영되면 실행되는 블록 메서드.
+ */
+- (void)takeSnapShot:(void (^_Nullable)(UIImage * _Nonnull))complete;
+
+/**
+ 컨트롤을 포함한 현재 지도의 스냅숏을 촬영합니다. 스냅숏이 촬영되면 `complete` 가 호출됩니다.
+
+ @param showControls 컨트롤 노출 여부. 노출할 경우 `YES`, 그렇지 않을 경우 `NO`.
+ @param complete 지도 스냅숏이 촬영되면 실행되는 블록 메서드.
+ */
+- (void)takeSnapshotWithShowControls:(BOOL)showControls complete:(void (^_Nullable)(UIImage * _Nonnull))complete;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflinePack.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflinePack.h
new file mode 100644
index 00000000..97be8596
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflinePack.h
@@ -0,0 +1,199 @@
+#import
+
+#import "NMFFoundation.h"
+#import "NMFOfflineRegion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The state an offline pack is currently in.
+ */
+typedef NS_ENUM (NSInteger, NMFOfflinePackState) {
+ /**
+ It is unknown whether the pack is inactive, active, or complete.
+
+ This is the initial state of a pack. The state of a pack becomes known by
+ the time the shared `NMFOfflineStorage` object sends the first
+ `NMFOfflinePackProgressChangedNotification` about the pack. For inactive
+ packs, you must explicitly request a progress update using the
+ `-[NMFOfflinePack requestProgress]` method.
+
+ An invalid pack always has a state of `NMFOfflinePackStateInvalid`, never
+ `NMFOfflinePackStateUnknown`.
+ */
+ NMFOfflinePackStateUnknown = 0,
+ /**
+ The pack is incomplete and is not currently downloading.
+
+ This is the initial state of a pack that is created using the
+ `-[NMFOfflineStorage addPackForRegion:withContext:completionHandler:]`
+ method, as well as after the `-[NMFOfflinePack suspend]` method is
+ called.
+ */
+ NMFOfflinePackStateInactive = 1,
+ /**
+ The pack is incomplete and is currently downloading.
+
+ This is the state of a pack after the `-[NMFOfflinePack resume]` method is
+ called.
+ */
+ NMFOfflinePackStateActive = 2,
+ /**
+ The pack has downloaded to completion.
+ */
+ NMFOfflinePackStateComplete = 3,
+ /**
+ The pack has been removed using the
+ `-[NMFOfflineStorage removePack:withCompletionHandler:]` method. Sending
+ any message to the pack will raise an exception.
+ */
+ NMFOfflinePackStateInvalid = 4,
+};
+
+/**
+ A structure containing information about an offline pack’s current download
+ progress.
+ */
+typedef struct __attribute__((objc_boxable)) NMFOfflinePackProgress {
+ /**
+ The number of resources, including tiles, that have been completely
+ downloaded and are ready to use offline.
+ */
+ uint64_t countOfResourcesCompleted;
+ /**
+ The cumulative size of the downloaded resources on disk, including tiles,
+ measured in bytes.
+ */
+ uint64_t countOfBytesCompleted;
+ /**
+ The number of tiles that have been completely downloaded and are ready
+ to use offline.
+ */
+ uint64_t countOfTilesCompleted;
+ /**
+ The cumulative size of the downloaded tiles on disk, measured in bytes.
+ */
+ uint64_t countOfTileBytesCompleted;
+ /**
+ The minimum number of resources that must be downloaded in order to view
+ the pack’s full region without any omissions.
+
+ At the beginning of a download, this count is a lower bound; the number of
+ expected resources may increase as the download progresses.
+ */
+ uint64_t countOfResourcesExpected;
+ /**
+ The maximum number of resources that must be downloaded in order to view
+ the pack’s full region without any omissions.
+
+ At the beginning of a download, when the exact number of required resources
+ is unknown, this field is set to `UINT64_MAX`. Thus this count is always an
+ upper bound.
+ */
+ uint64_t maximumResourcesExpected;
+} NMFOfflinePackProgress;
+
+/**
+ An `NMFOfflinePack` represents a collection of resources necessary for viewing
+ a region offline to a local database.
+
+ To create an instance of `NMFOfflinePack`, use the
+ `+[NMFOfflineStorage addPackForRegion:withContext:completionHandler:]` method.
+ A pack created using `-[NMFOfflinePack init]` is immediately invalid.
+
+ ### Example
+ ```swift
+ NMFOfflineStorage.shared.addPack(for: region, withContext: context) { (pack, error) in
+ guard let pack = pack else {
+ // If adding the pack fails, log an error to console.
+ print("Error:", error?.localizedDescription ?? "unknown error adding pack at \(#file)(\(#line)) in \(#function)")
+ return
+ }
+
+ // Start an NMFOfflinePack download
+ pack.resume()
+ ```
+ */
+NMF_EXPORT
+@interface NMFOfflinePack : NSObject
+
+/**
+ The region for which the pack manages resources.
+ */
+@property (nonatomic, readonly) id region;
+
+/**
+ Arbitrary data stored alongside the downloaded resources.
+
+ The context typically holds application-specific information for identifying
+ the pack, such as a user-selected name.
+ */
+@property (nonatomic, readonly) NSData *context;
+
+/**
+ The pack’s current state.
+
+ The state of an inactive or completed pack is computed lazily and is set to
+ `NMFOfflinePackStateUnknown` by default. To request the pack’s status, use the
+ `-requestProgress` method. To get notified when the state becomes known and
+ when it changes, observe KVO change notifications on this pack’s `state` key
+ path. Alternatively, you can add an observer for
+ `NMFOfflinePackProgressChangedNotification`s about this pack that come from the
+ default notification center.
+ */
+@property (nonatomic, readonly) NMFOfflinePackState state;
+
+/**
+ The pack’s current progress.
+
+ The progress of an inactive or completed pack is computed lazily, and all its
+ fields are set to 0 by default. To request the pack’s progress, use the
+ `-requestProgress` method. To get notified when the progress becomes
+ known and when it changes, observe KVO change notifications on this pack’s
+ `state` key path. Alternatively, you can add an observer for
+ `NMFOfflinePackProgressChangedNotification`s about this pack that come from the
+ default notification center.
+ */
+@property (nonatomic, readonly) NMFOfflinePackProgress progress;
+
+/**
+ Resumes downloading if the pack is inactive.
+
+ When a pack resumes after being suspended, it may begin by iterating over the
+ already downloaded resources. As a result, the `progress` structure’s
+ `countOfResourcesCompleted` field may revert to 0 before rapidly returning to
+ the level of progress at the time the pack was suspended.
+
+ To temporarily suspend downloading, call the `-suspend` method.
+ */
+- (void)resume;
+
+/**
+ Temporarily stops downloading if the pack is active.
+
+ A pack suspends asynchronously, so some network requests may be sent after this
+ method is called. Regardless, the `progress` property will not be updated until
+ `-resume` is called.
+
+ If the pack previously reached a higher level of progress before being
+ suspended, it may wait to suspend until it returns to that level.
+
+ To resume downloading, call the `-resume` method.
+ */
+- (void)suspend;
+
+/**
+ Request an asynchronous update to the pack’s `state` and `progress` properties.
+
+ The state and progress of an inactive or completed pack are computed lazily. If
+ you need the state or progress of a pack whose `state` property is currently
+ set to `NMFOfflinePackStateUnknown`, observe KVO change notifications on this
+ pack’s `state` key path, then call this method. Alternatively, you can add an
+ observer for `NMFOfflinePackProgressChangedNotification` about this pack that
+ come from the default notification center.
+ */
+- (void)requestProgress;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineRegion.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineRegion.h
new file mode 100644
index 00000000..6d459234
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineRegion.h
@@ -0,0 +1,23 @@
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ An object conforming to the `NMFOfflineRegion` protocol determines which
+ resources are required by an `NMFOfflinePack` object.
+ */
+@protocol NMFOfflineRegion
+
+/**
+ URL of the style whose resources are required for offline viewing.
+
+ In addition to the JSON stylesheet, different styles may require different font
+ glyphs, sprite sheets, and other resources.
+
+ The URL may be a full HTTP or HTTPS URL.
+ */
+@property (nonatomic, readonly) NSURL *styleURL;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineStorage.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineStorage.h
new file mode 100644
index 00000000..8e0bc01b
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineStorage.h
@@ -0,0 +1,481 @@
+#import
+
+#import "NMFFoundation.h"
+#import "NMFTypes.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFOfflinePack;
+@class NMGLatLngBounds;
+@protocol NMFOfflineRegion;
+@protocol NMFOfflineStorageDelegate;
+
+/**
+ Posted by the shared `NMFOfflineStorage` object when an `NMFOfflinePack`
+ object’s progress changes. The progress may change due to a resource being
+ downloaded or because the pack discovers during the download that more
+ resources are required for offline viewing. This notification is posted
+ whenever any field in the `progress` property changes.
+
+ The `object` is the `NMFOfflinePack` object whose progress changed. The
+ `NMFOfflinePackUserInfoKeyState` key and details about the pack’s current
+ progress in the `NMFOfflinePackUserInfoKeyProgress` key. You may also consult
+ progress in the `NMFOfflinePackProgressUserInfoKey` key. You may also consult
+ the `NMFOfflinePack.state` and `NMFOfflinePack.progress` properties, which
+ provide the same values.
+
+ If you only need to observe changes in a particular pack’s progress, you can
+ alternatively observe KVO change notifications to the pack’s `progress` key
+ path.
+
+ #### Related examples
+ See the
+ Download an offline map example to learn how to calculate the progress
+ of an offline download.
+ */
+extern NMF_EXPORT const NSNotificationName NMFOfflinePackProgressChangedNotification;
+
+/**
+ Posted by the shared `NMFOfflineStorage` object whenever an `NMFOfflinePack`
+ object encounters an error while downloading. The error may be recoverable and
+ may not warrant the user’s attention. For example, the pack’s implementation
+ may attempt to re-request failed resources based on an exponential backoff
+ strategy or upon the restoration of network access.
+
+ The `object` is the `NMFOfflinePack` object that encountered the error. The
+ `userInfo` dictionary contains the error object in the
+ `NMFOfflinePackUserInfoKeyError` key.
+ */
+extern NMF_EXPORT const NSNotificationName NMFOfflinePackErrorNotification;
+
+/**
+ Posted by the shared `NMFOfflineStorage` object when the maximum number of
+ Mapbox-hosted tiles has been downloaded and stored on the current device.
+
+ The `object` is the `NMFOfflinePack` object that reached the tile limit in the
+ course of downloading. The `userInfo` dictionary contains the tile limit in the
+ `NMFOfflinePackUserInfoKeyMaximumCount` key.
+
+ Once this limit is reached, no instance of `NMFOfflinePack` can download
+ additional tiles from Mapbox APIs until already downloaded tiles are removed by
+ calling the `-[NMFOfflineStorage removePack:withCompletionHandler:]` method.
+ */
+extern NMF_EXPORT const NSNotificationName NMFOfflinePackMaximumTilesReachedNotification;
+
+/**
+ A key in the `userInfo` property of a notification posted by `NMFOfflinePack`.
+ */
+typedef NSString *NMFOfflinePackUserInfoKey NS_EXTENSIBLE_STRING_ENUM;
+
+/**
+ The key for an `NSNumber` object that indicates an offline pack’s current
+ state. This key is used in the `userInfo` dictionary of an
+ `NMFOfflinePackProgressChangedNotification` notification. Call `-integerValue`
+ on the object to receive the `NMFOfflinePackState`-typed state.
+ */
+extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyState;
+
+/**
+ The key for an `NSValue` object that indicates an offline pack’s current
+ progress. This key is used in the `userInfo` dictionary of an
+ `NMFOfflinePackProgressChangedNotification` notification. Call
+ `-NMFOfflinePackProgressValue` on the object to receive the
+ `NMFOfflinePackProgress`-typed progress.
+ */
+extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyProgress;
+
+/**
+ The key for an `NSError` object that is encountered in the course of
+ downloading an offline pack. This key is used in the `userInfo` dictionary of
+ an `NMFOfflinePackErrorNotification` notification. The error’s domain is
+ `NMFErrorDomain`. See `NMFErrorCode` for possible error codes.
+ */
+extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyError;
+
+/**
+ The key for an `NSNumber` object that indicates the maximum number of
+ Mapbox-hosted tiles that may be downloaded and stored on the current device.
+ This key is used in the `userInfo` dictionary of an
+ `NMFOfflinePackMaximumTilesReachedNotification` notification. Call
+ `-unsignedLongLongValue` on the object to receive the `uint64_t`-typed tile
+ limit.
+ */
+extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyMaximumCount;
+
+extern NMF_EXPORT NSString * const NMFOfflinePackMaximumCountUserInfoKey __attribute__((deprecated("Use NMFOfflinePackUserInfoKeyMaximumCount")));
+
+extern NMF_EXPORT NMFExceptionName const NMFUnsupportedRegionTypeException;
+
+/**
+ A block to be called once an offline pack has been completely created and
+ added.
+
+ An application typically calls the `-resume` method on the pack inside this
+ completion handler to begin the download.
+
+ @param pack Contains a pointer to the newly added pack, or `nil` if there was
+ an error creating or adding the pack.
+ @param error Contains a pointer to an error object (if any) indicating why the
+ pack could not be created or added.
+ */
+typedef void (^NMFOfflinePackAdditionCompletionHandler)(NMFOfflinePack * _Nullable pack, NSError * _Nullable error);
+
+/**
+ A block to be called once an offline pack has been completely invalidated and
+ removed.
+
+ Avoid any references to the pack inside this completion handler: by the time
+ this completion handler is executed, the pack has become invalid, and any
+ messages passed to it will raise an exception.
+
+ @param error Contains a pointer to an error object (if any) indicating why the
+ pack could not be invalidated or removed.
+ */
+typedef void (^NMFOfflinePackRemovalCompletionHandler)(NSError * _Nullable error);
+
+typedef void (^NMFOfflinePackCompletionHandler)(void);
+
+/**
+ A block to be called once the contents of a file are copied into the current packs.
+
+ @param fileURL The file URL of the offline database containing the offline packs
+ that were copied.
+ @param packs An array of all known offline packs, or `nil` if there was an error
+ creating or adding the pack.
+ @param error A pointer to an error object (if any) indicating why the pack could
+ not be created or added.
+ */
+typedef void (^NMFBatchedOfflinePackAdditionCompletionHandler)(NSURL *fileURL, NSArray * _Nullable packs, NSError * _Nullable error);
+
+/**
+ The type of resource that is requested.
+ */
+typedef NS_ENUM(NSUInteger, NMFResourceKind) {
+ /** Unknown type */
+ NMFResourceKindUnknown,
+ /** Style sheet JSON file */
+ NMFResourceKindStyle,
+ /** TileJSON file as specified in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sources */
+ NMFResourceKindSource,
+ /** A vector or raster tile as described in the style sheet at
+ https://www.mapbox.com/mapbox-gl-js/style-spec/#sources */
+ NMFResourceKindTile,
+ /** Signed distance field glyphs for text rendering. These are the URLs specified in the style
+ in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-glyphs */
+ NMFResourceKindGlyphs,
+ /** Image part of a sprite sheet. It is constructed of the prefix in
+ https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a PNG file extension. */
+ NMFResourceKindSpriteImage,
+ /** JSON part of a sprite sheet. It is constructed of the prefix in
+ https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a JSON file extension. */
+ NMFResourceKindSpriteJSON,
+ /** Image data for a georeferenced image source. **/
+ NMFResourceKindImage,
+};
+
+/**
+ NMFOfflineStorage implements a singleton (shared object) that manages offline
+ packs and ambient caching. All of this class’s instance methods are asynchronous,
+ reflecting the fact that offline resources are stored in a database. The shared
+ object maintains a canonical collection of offline packs in its `packs` property.
+
+ #### Related examples
+ See the
+ Download an offline map example to learn how to create and register an
+ offline pack for a defined region.
+ */
+NMF_EXPORT
+@interface NMFOfflineStorage : NSObject
+
+/**
+ Returns the shared offline storage object.
+ */
+@property (class, nonatomic, readonly) NMFOfflineStorage *sharedOfflineStorage;
+
+#pragma mark - Adding Contents of File
+
+/**
+ Adds the offline packs located at the given file path to offline storage.
+
+ The file must be a valid offline region database bundled with the application
+ or downloaded separately.
+
+ The resulting packs are added or updated to the shared offline storage object’s `packs`
+ property, then the `completion` block is executed.
+
+ @param filePath A string representation of the file path. The file path must be
+ writable as schema updates may be perfomed.
+ @param completion The completion handler to call once the contents of the given
+ file has been added to offline storage. This handler is executed asynchronously
+ on the main queue.
+ */
+- (void)addContentsOfFile:(NSString *)filePath withCompletionHandler:(nullable NMFBatchedOfflinePackAdditionCompletionHandler)completion;
+
+/**
+ Adds the offline packs located at the given URL to offline storage.
+
+ The file must be a valid offline region database bundled with the application
+ or downloaded separately.
+
+ The resulting packs are added or updated to the shared offline storage object’s `packs`
+ property, then the `completion` block is executed.
+
+ @param fileURL A file URL specifying the file to add. URL should be a valid system path.
+ The file URL must be writable as schema updates may be performed.
+ @param completion The completion handler to call once the contents of the given
+ file has been added to offline storage. This handler is executed asynchronously
+ on the main queue.
+ */
+- (void)addContentsOfURL:(NSURL *)fileURL withCompletionHandler:(nullable NMFBatchedOfflinePackAdditionCompletionHandler)completion;
+
+#pragma mark - Accessing the Delegate
+
+/**
+ The receiver’s delegate.
+
+ An offline storage object sends messages to its delegate to allow it to
+ transform URLs before they are requested from the internet. This can be used
+ add or remove custom parameters, or reroute certain requests to other servers
+ or endpoints.
+ */
+@property(nonatomic, weak, nullable) IBOutlet id delegate;
+
+#pragma mark - Managing Offline Packs
+
+/**
+ An array of all known offline packs, in the order in which they were created.
+
+ This property is set to `nil`, indicating that the receiver does not yet know
+ the existing packs, for an undefined amount of time starting from the moment
+ the shared offline storage object is initialized until the packs are fetched
+ from the database. After that point, this property is always non-nil, but it
+ may be empty to indicate that no packs are present.
+
+ To detect when the shared offline storage object has finished loading its
+ `packs` property, observe KVO change notifications on the `packs` key path.
+ The initial load results in an `NSKeyValueChangeSetting` change.
+ */
+@property (nonatomic, strong, readonly, nullable) NSArray *packs;
+
+/**
+ Creates and registers an offline pack that downloads the resources needed to
+ use the given region offline.
+
+ The resulting pack is added to the shared offline storage object’s `packs`
+ property, then the `completion` block is executed with that pack passed in.
+
+ The pack has an initial state of `NMFOfflinePackStateInactive`. To begin
+ downloading resources, call `-[NMFOfflinePack resume]` on the pack from within
+ the completion handler. To monitor download progress, add an observer for
+ `NMFOfflinePackProgressChangedNotification`s about that pack.
+
+ To detect when any call to this method results in a new pack, observe KVO
+ change notifications on the shared offline storage object’s `packs` key path.
+ Additions to that array result in an `NSKeyValueChangeInsertion` change.
+
+ @param region A region to download.
+ @param context Arbitrary data to store alongside the downloaded resources.
+ @param completion The completion handler to call once the pack has been added.
+ This handler is executed asynchronously on the main queue.
+ */
+- (void)addPackForRegion:(id )region withContext:(NSData *)context completionHandler:(nullable NMFOfflinePackAdditionCompletionHandler)completion;
+
+/**
+ Unregisters the given offline pack and allows resources that are no longer
+ required by any remaining packs to be potentially freed.
+
+ As soon as this method is called on a pack, the pack becomes invalid; any
+ attempt to send it a message will result in an exception being thrown. If an
+ error occurs and the pack cannot be removed, do not attempt to reuse the pack
+ object. Instead, if you need continued access to the pack, suspend all packs
+ and use the `-reloadPacks` method to obtain valid pointers to all the packs.
+
+ To detect when any call to this method results in a pack being removed, observe
+ KVO change notifications on the shared offline storage object’s `packs` key
+ path. Removals from that array result in an `NSKeyValueChangeRemoval` change.
+
+ When you remove an offline pack, any resources that are required by that pack,
+ but not other packs, become eligible for deletion from offline storage. Because
+ the backing store used for offline storage is also used as a general purpose
+ cache for map resources, such resources may not be immediately removed if the
+ implementation determines that they remain useful for general performance of
+ the map.
+
+ @param pack The offline pack to remove.
+ @param completion The completion handler to call once the pack has been
+ removed. This handler is executed asynchronously on the main queue.
+ */
+- (void)removePack:(NMFOfflinePack *)pack withCompletionHandler:(nullable NMFOfflinePackRemovalCompletionHandler)completion;
+
+/**
+ Invalidates the specified offline pack. This method checks that the tiles
+ in the specified offline pack match those from the server. Local tiles that
+ do not match the latest version on the server are updated.
+
+ This is more efficient than deleting the offline pack and downloading it
+ again. If the data stored locally matches that on the server, new data will
+ not be downloaded.
+
+ @param pack The offline pack to be invalidated.
+ @param completion The completion handler to call once the pack has been
+ removed. This handler is executed asynchronously on the main queue.
+ */
+- (void)invalidatePack:(NMFOfflinePack *)pack withCompletionHandler:(void (^)(NSError * _Nullable))completion;
+/**
+ Forcibly, asynchronously reloads the `packs` property. At some point after this
+ method is called, the pointer values of the `NMFOfflinePack` objects in the
+ `packs` property change, even if the underlying data for these packs has not
+ changed. If this method is called while a pack is actively downloading, the
+ behavior is undefined.
+
+ You typically do not need to call this method.
+
+ To detect when the shared offline storage object has finished reloading its
+ `packs` property, observe KVO change notifications on the `packs` key path.
+ A reload results in an `NSKeyValueChangeSetting` change.
+ */
+- (void)reloadPacks;
+
+/**
+ 파일 캐시 초기화
+ */
+- (void)flushCacheWithCompletionHandler:(nullable NMFOfflinePackRemovalCompletionHandler)completion;
+
+#pragma mark Preload Database
+
+- (void)addPreloadTile:(NSString *)filePath
+ sourceId:(NSString *)sourceId
+ tileUrlPrefix:(NSString *)tileUrlPrefix
+ tileVersion:(NSString *)tileVersion
+ minZoom:(NSInteger)minzoom
+ maxZoom:(NSInteger)maxZoom
+ bounds:(NMGLatLngBounds *)bounds
+ completion:(nullable NMFOfflinePackCompletionHandler)completion;
+
+- (void)removePreloadTile:(NSString *)filePath
+ completion:(nullable NMFOfflinePackCompletionHandler)completion;
+
+- (void)setPreloadFallbackToStreaming:(BOOL)preloadFallbackToStreaming
+ completion:(nullable NMFOfflinePackCompletionHandler)completion;
+
+/**
+ The cumulative size, measured in bytes, of all downloaded resources on disk.
+
+ The returned value includes all resources, including tiles, whether downloaded
+ as part of an offline pack or due to caching during normal use of `NMFMapView`.
+ */
+@property (nonatomic, readonly) unsigned long long countOfBytesCompleted;
+
+#pragma mark - Managing Ambient Cache
+
+/**
+ Sets the maximum ambient cache size in bytes. The default maximum cache
+ size is 50 MB. To disable ambient caching, set the maximum ambient cache size
+ to `0`. Setting the maximum ambient cache size does not impact the maximum size
+ of offline packs.
+
+ While this method does not limit the space available to offline packs,
+ data in offline packs count towards this limit. If the maximum ambient
+ cache size is set to 30 MB and 20 MB of offline packs are downloaded,
+ there may be only 10 MB reserved for the ambient cache.
+
+ This method should be called before the map and map style have been loaded.
+
+ This method is potentially expensive, as the database will trim cached data
+ in order to prevent the ambient cache from being larger than the
+ specified amount.
+
+ @param cacheSize The maximum size in bytes for the ambient cache.
+ @param completion The completion handler to call once the maximum ambient cache size
+ has been set. This handler is executed synchronously on the main queue.
+ */
+
+- (void)setMaximumAmbientCacheSize:(NSUInteger)cacheSize withCompletionHandler:(void (^)(NSError *_Nullable error))completion;
+
+/**
+ Invalidates the ambient cache. This method checks that the tiles in the
+ ambient cache match those from the server. If the local tiles do not match
+ those on the server, they are re-downloaded.
+
+ This is recommended over clearing the cache or resetting the database
+ because valid local tiles will not be downloaded again.
+
+ Resources shared with offline packs will not be affected by this method.
+
+ @param completion The completion handler to call once the ambient cache has
+ been revalidated. This handler is executed asynchronously on the main queue.
+ */
+
+- (void)invalidateAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion;
+
+/**
+ Clears the ambient cache by deleting resources. This method does not
+ affect resources shared with offline regions.
+
+ @param completion The completion handler to call once resources from
+ the ambient cache have been cleared. This handler is executed
+ asynchronously on the main queue.
+ */
+
+- (void)clearAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion;
+
+/**
+ Deletes the existing database, which includes both the ambient cache and offline packs,
+ then reinitializes it.
+
+ You typically do not need to call this method.
+
+ @param completion The completion handler to call once the pack has database has
+ been reset. This handler is executed asynchronously on the main queue.
+ */
+
+- (void)resetDatabaseWithCompletionHandler:(void (^)(NSError *_Nullable error))completion;
+
+/*
+ Inserts the provided resource into the ambient cache.
+
+ This method mimics the caching that would take place if the equivalent resource
+ were requested in the process of map rendering. Use this method to pre-warm the
+ cache with resources you know will be requested.
+
+ This method is asynchronous; the data may not be immediately available for
+ in-progress requests, though subsequent requests should have access to the
+ cached data.
+
+ @param data Response data to store for this resource. The data is expected to
+ be uncompressed; internally, the cache will compress data as necessary.
+ @param url The URL at which the data can normally be found.
+ @param modified The date the resource was last modified.
+ @param expires The date after which the resource is no longer valid.
+ @param eTag An HTTP entity tag.
+ @param mustRevalidate A Boolean value indicating whether the data is still
+ usable past the expiration date.
+ */
+- (void)preloadData:(NSData *)data forURL:(NSURL *)url modificationDate:(nullable NSDate *)modified expirationDate:(nullable NSDate *)expires eTag:(nullable NSString *)eTag mustRevalidate:(BOOL)mustRevalidate NS_SWIFT_NAME(preload(_:for:modifiedOn:expiresOn:eTag:mustRevalidate:));
+
+- (void)putResourceWithUrl:(NSURL *)url data:(NSData *)data modified:(nullable NSDate *)modified expires:(nullable NSDate *)expires etag:(nullable NSString *)etag mustRevalidate:(BOOL)mustRevalidate __attribute__((deprecated("", "-preloadData:forURL:modificationDate:expirationDate:eTag:mustRevalidate:")));
+
+@end
+
+/**
+ The `NMFOfflineStorageDelegate` protocol defines methods that a delegate of an
+ `NMFOfflineStorage` object can optionally implement to transform various types
+ of URLs before downloading them via the internet.
+ */
+@protocol NMFOfflineStorageDelegate
+
+/**
+ Sent whenever a URL needs to be transformed.
+
+ @param storage The storage object processing the download.
+ @param kind The kind of URL to be transformed.
+ @param url The original URL to be transformed.
+ @return A URL that will now be downloaded.
+ */
+- (NSURL *)offlineStorage:(NMFOfflineStorage *)storage
+ URLForResourceOfKind:(NMFResourceKind)kind
+ withURL:(NSURL *)url;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlay.h
new file mode 100644
index 00000000..d9a76a3b
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlay.h
@@ -0,0 +1,262 @@
+#import
+#import
+
+#import "NMFGeometry.h"
+#import "NMFPickable.h"
+
+@class NMFMapView;
+@class NMFOverlay;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 오버레이를 어느 방향으로 정렬할지 나타내는 열거형.
+
+ @warning Deprecated. `NMFAlignType`을 사용하세요.
+ */
+typedef NS_ENUM(NSInteger, NMFAlign) {
+ /**
+ 가운데.
+ */
+ NMFAlignCenter,
+
+ /**
+ 왼쪽.
+ */
+ NMFAlignLeft,
+
+ /**
+ 오른쪽.
+ */
+ NMFAlignRight,
+
+ /**
+ 위.
+ */
+ NMFAlignTop,
+
+ /**
+ 아래.
+ */
+ NMFAlignBottom,
+
+ /**
+ 왼쪽 위.
+ */
+ NMFAlignTopLeft,
+
+ /**
+ 오른쪽 위.
+ */
+ NMFAlignTopRight,
+
+ /**
+ 오른쪽 아래.
+ */
+ NMFAlignBottomRight,
+
+ /**
+ 왼쪽 아래.
+ */
+ NMFAlignBottomLeft
+} __deprecated_msg("Use `NMFAlignType` instead.");
+
+/**
+ 오버레이를 어느 방향으로 정렬할지 나타내는 객체.
+ 속성 객체로만 사용해야 합니다.
+ */
+NMF_EXPORT
+@interface NMFAlignType : NSObject
+
+/**
+ 가운데.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *center;
+
+/**
+ 왼쪽.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *left;
+
+/**
+ 오른쪽.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *right;
+
+/**
+ 위.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *top;
+
+/**
+ 아래.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *bottom;
+
+/**
+ 왼쪽 위.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *topLeft;
+
+/**
+ 오른쪽 위.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *topRight;
+
+/**
+ 오른쪽 아래.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *bottomRight;
+
+/**
+ 왼쪽 아래.
+ */
+@property(class, nonatomic, readonly) NMFAlignType *bottomLeft;
+
++ (NMFAlignType *)center;
++ (NMFAlignType *)left;
++ (NMFAlignType *)right;
++ (NMFAlignType *)top;
++ (NMFAlignType *)bottom;
++ (NMFAlignType *)topLeft;
++ (NMFAlignType *)topRight;
++ (NMFAlignType *)bottomRight;
++ (NMFAlignType *)bottomLeft;
+
+@end
+
+/**
+ 끝 지점의 모양
+ */
+typedef NS_ENUM(NSUInteger, NMFOverlayLineCap) {
+ /**
+ 평면. 끝 지점이 좌표에 딱 맞게 잘립니다.
+ */
+ NMFOverlayLineCapButt,
+ /**
+ 원형. 끝 지점에 지름이 두께만 한 원이 그려집니다.
+ */
+ NMFOverlayLineCapRound,
+ /**
+ 사각형. 끝 지점에 두께의 반만큼의 직사각형이 추가됩니다.
+ */
+ NMFOverlayLineCapSquare,
+};
+
+/**
+ 연결점의 모양.
+ */
+typedef NS_ENUM(NSUInteger, NMFOverlayLineJoin) {
+ /**
+ 사면. 연결점에서 뾰족하게 튀어나온 부분이 잘려 나갑니다.
+ */
+ NMFOverlayLineJoinBevel,
+ /**
+ 원형. 연결점이 둥글게 그려집니다.
+ */
+ NMFOverlayLineJoinRound,
+ /**
+ 미터. 연결점이 뾰족하게 그려집니다.
+ */
+ NMFOverlayLineJoinMiter,
+};
+
+/**
+ 오버레이 터치에 대한 이벤트 핸들러 블록 타입 선언.
+
+ @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 `NMFMapView`까지 이벤트가 전달되어 `NMFMapViewTouchDelegate`의 `mapView:didTapMap:point:`가 호출됩니다.
+ */
+typedef BOOL (^NMFOverlayTouchHandler)(NMFOverlay * __weak);
+
+
+/**
+ 지도에 오버레이되는 요소를 나타내는 최상위 클래스. 대부분의 오버레이는 `mapView`를 사용해 동적으로 지도에 추가하거나 지도로부터 제거할 수 있습니다.
+ */
+NMF_EXPORT
+@interface NMFOverlay : NSObject
+
+/**
+ 오버레이의 고유 ID.
+ */
+@property(nonatomic, copy, readonly) NSString *overlayID;
+
+/**
+ 사용자 임의 속성. 필요에 따라서 부가적인 정보를 저장할 수 있습니다.
+ */
+@property(nonatomic, strong) NSDictionary *userInfo;
+
+/**
+ 오버레이를 추가할 지도 객체. `nil`을 지정하면 지도에서 제거됩니다.
+ */
+@property(nonatomic, weak, nullable) NMFMapView *mapView;
+
+/**
+ 숨김 속성. `YES`일 경우 오버레이는 화면에 나타나지 않으며 이벤트도 받지 못합니다.
+ 숨김 속성은 명시적으로 지정하지 않는 한 변하지 않습니다. 즉, 오버레이가 현재 보이는 지도 영역의 바깥쪽으로
+ 나가더라도 숨김 속성이 `YES`로 변하지는 않습니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property(nonatomic) BOOL hidden;
+
+/**
+ 보조 Z 인덱스. 전역 Z 인덱스가 동일한 여러 오버레이가 화면에서 겹쳐지면 보조 Z 인덱스가 큰
+ 오버레이가 작은 오버레이를 덮습니다.
+
+ 기본값은 `0`입니다.
+ */
+@property(nonatomic) NSInteger zIndex;
+
+/**
+ 전역 Z 인덱스. 여러 오버레이가 화면에서 겹쳐지면 전역 Z 인덱스가 큰 오버레이가 작은 오버레이를
+ 덮습니다. 또한 값이 `0` 이상이면 오버레이가 심벌 위에, `0` 미만이면 심벌 아래에 그려집니다.
+ */
+@property(nonatomic) NSInteger globalZIndex;
+
+/**
+ 오버레이가 보이는 최소 줌 레벨.
+
+ 기본값은 `NMF_MIN_ZOOM`입니다.
+ */
+@property(nonatomic) double minZoom;
+
+/**
+ 오버레이가 보이는 최대 줌 레벨.
+
+ 기본값은 `NMF_MAX_ZOOM`입니다.
+ */
+@property(nonatomic) double maxZoom;
+
+/**
+ 지도의 줌 레벨과 오버레이의 최소 줌 레벨이 동일할 때 오버레이를 보일지 여부를 반환합니다.
+ 만약 `YES`이면 오버레이가 나타나고 `NO`이면 나타나지 않습니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, setter=setMinZoomInclusive:) BOOL isMinZoomInclusive;
+
+/**
+ 지도의 줌 레벨과 오버레이의 최대 줌 레벨이 동일할 때 오버레이를 보일지 여부를 반환합니다.
+ 만약 `YES`이면 오버레이가 나타나고 `NO`이면 나타나지 않습니다.
+
+ 기본값은 `YES`입니다.
+ */
+@property(nonatomic, setter=setMaxZoomInclusive:) BOOL isMaxZoomInclusive;
+
+/**
+ 오버레이가 터치될 경우 호출되는 콜백 블록.
+ */
+@property(nonatomic, nullable) NMFOverlayTouchHandler touchHandler;
+
+/**
+ 오버레이가 유효하여 지도에 추가될 수 있는지 여부를 반환합니다. `NMFOverlay`를 상속받는 오버레이들은 이 메서드를 재정의할 수 있습니다.
+
+ 기본값은 `NO`입니다.
+
+ @return 지도에 추가될 수 있다면 `YES`, 아니면 `NO`.
+ */
+- (BOOL)shouldAddOverlayToMap;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlayImage.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlayImage.h
new file mode 100644
index 00000000..04347ee7
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlayImage.h
@@ -0,0 +1,119 @@
+#import
+#import "NMFFoundation.h"
+
+@class NMFOverlay;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 오버레이에서 사용하는 비트맵 이미지를 나타내는 불변 클래스. 팩토리 메서드를 이용해
+ asset, `UIImage`, `NSBundle` 등으로부터 인스턴스를 생성할 수 있습니다.
+ */
+NMF_EXPORT
+@interface NMFOverlayImage : NSObject
+
+/**
+ 재사용 식별자.
+ */
+@property(nonatomic, readonly, copy) NSString *reuseIdentifier;
+/**
+ 이미지의 너비.
+ */
+@property(nonatomic, readonly) CGFloat imageWidth;
+/**
+ 이미지의 높이.
+ */
+@property(nonatomic, readonly) CGFloat imageHeight;
+/**
+ 이미지의 스케일.
+ */
+@property(nonatomic, readonly) CGFloat imageScale;
+/**
+ 이미지.
+ */
+@property(nonatomic, readonly) UIImage *image;
+
+/**
+ `UIImage`로부터 `NMFOverlayImage` 객체를 생성합니다.
+ `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다.
+
+ @param image 비트맵을 생성할 이미지 객체.
+ @return `NMFOverlayImage` 객체.
+ */
++ (instancetype)overlayImageWithImage:(UIImage *)image;
+
+/**
+ `UIImage`로부터 `NMFOverlayImage` 객체를 생성합니다.
+ `reuseIdentifier`는 `identifier`로 지정됩니다.
+
+ @param image 비트맵을 생성할 이미지 객체.
+ @param identifier 재사용 식별자.
+ @return `NMFOverlayImage` 객체.
+ */
++ (instancetype)overlayImageWithImage:(UIImage *)image reuseIdentifier:(nullable NSString *)identifier;
+
+/**
+ 앱의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다.
+ `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다.
+
+ @param imageName 비트맵을 생성할 이미지 asset 이름.
+ @return `NMFOverlayImage` 객체.
+ */
++ (instancetype)overlayImageWithName:(NSString *)imageName;
+
+/**
+ 앱의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다.
+ `reuseIdentifier`는 `identifier`로 지정됩니다.
+
+ @param imageName 비트맵을 생성할 이미지 asset 이름.
+ @param identifier 재사용 식별자.
+ @return `NMFOverlayImage` 객체.
+ */
++ (instancetype)overlayImageWithName:(NSString *)imageName reuseIdentifier:(nullable NSString *)identifier;
+
+/**
+ 지정한 bundle의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다.
+ `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다.
+
+ @param imageName 비트맵을 생성할 이미지 asset 이름.
+ @param bundle 이미지를 찾을 번들.
+ @return `NMFOverlayImage` 객체.
+ */
++ (instancetype)overlayImageWithName:(NSString *)imageName inBundle:(nullable NSBundle *)bundle;
+
+/**
+ 지정한 bundle의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다.
+ `reuseIdentifier`는 `identifier`로 지정됩니다.
+
+ @param imageName 비트맵을 생성할 이미지 asset 이름.
+ @param bundle 이미지를 찾을 번들.
+ @param identifier 재사용 식별자.
+ @return `NMFOverlayImage` 객체.
+ */
++ (instancetype)overlayImageWithName:(NSString *)imageName inBundle:(nullable NSBundle *)bundle reuseIdentifier:(nullable NSString *)identifier;
+
+- (void)invalidate;
+
+@end
+
+
+/**
+ 지도에서 사용할 수 있는 이미지 리소스를 만들기 위한 `UIView`를 반환할 수 있는 프로토콜.
+ 이 프로토콜을 구현할 경우, 오버레이의 상태에 따라서 `UIView`를 반환하게 하여 그 스냅숏을
+ `NMFOverlay` 클래스에서 이미지 형태로 사용할 수 있습니다.
+ */
+@protocol NMFOverlayImageDataSource
+@required
+
+/**
+ 스냅숏을 생성하게 될 `UIView`를 반환할 수 있도록 구현해야 합니다. `nil`을 반환하면 이미지를 그리지 않습니다.
+
+ @param overlay 이미지를 사용하게 될 `NMFOverlay` 객체.
+ @return 스냅숏을 생성할 `UIView` 객체.
+ */
+- (UIView *)viewWithOverlay:(NMFOverlay *)overlay;
+
+@end
+
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPath.h
new file mode 100644
index 00000000..3d99de26
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPath.h
@@ -0,0 +1,157 @@
+#import
+#import
+
+#import "NMFGeometry.h"
+#import "NMFOverlay.h"
+
+@class NMFOverlayImage;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 경로선 전역 Z 인덱스
+ */
+const static int NMF_PATH_OVERLAY_GLOBAL_Z_INDEX = -100000;
+
+/**
+ 지도에 경로선을 나타내는 오버레이. 하나의 선을 나타낸다는 측면에서는 `NMFPolylineOverlay`와 유사하나, 다음과
+ 같이 경로선에 특화된 특징이 있습니다.
+ - 테두리와 패턴 이미지를 적용할 수 있습니다.
+ - 지도를 기울이더라도 두께가 일정하게 유지됩니다.
+ - 자기교차(self-intersection)가 일어나더라도 테두리, 패턴 이미지가 자연스럽게 나타납니다.
+ - 진척률을 지정할 수 있으며, 지나온/지나갈 경로에 각각 다른 색상과 테두리를을 지정할 수 있습니다.
+ - 점선 패턴, 끝 지점/연결점의 모양은 지정할 수 없습니다.
+ */
+NMF_EXPORT
+@interface NMFPath : NMFOverlay
+
+/**
+ 경로선의 색상. 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의
+ 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 그려지지 않습니다.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *color;
+
+/**
+ 경로선의 테두리 색상. 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야
+ 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *outlineColor;
+
+/**
+ 지나온 경로선의 색상. 지나온 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야
+ 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도
+ 그려지지 않습니다.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *passedColor;
+
+/**
+ 지나온 경로선의 테두리 색상. 지나온 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나
+ 완전히 불투명해야 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할
+ 경우 테두리도 그려지지 않습니다.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *passedOutlineColor;
+
+/**
+ 두께. pt 단위.
+
+ 기본값은 `5`입니다.
+ */
+@property (nonatomic) CGFloat width;
+
+/**
+ 테두리 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다.
+
+ 기본값은 `1`입니다.
+ */
+@property (nonatomic) CGFloat outlineWidth;
+
+/**
+ 경로선 오버레이를 나타내는 `NMGLineString`객체.
+ 경로선 오버레이를 생성한 이후 경로선을 갱신하기 위한 목적으로 사용할 수 있습니다.
+ */
+@property (nonatomic) NMGLineString *path;
+
+/**
+ 진척률. 값의 범위는 `-1`~`1`입니다. 경로는 진척률을 기준으로 지나온 경로와 지나갈 경로로 구분됩니다. 지나온 경로에는
+ `passedColor`와 `passedOutlineColor`가 사용되고 지나갈 경로에는 `color`와 `outlineColor`가 사용됩니다.
+
+ - 진척률을 양수로 지정하면 첫 좌표부터 진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다.
+ - 진척률을 음수로 지정하면 마지막 좌표부터 -진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다.
+ - 진척률을 `0`으로 지정하면 모든 선형이 지나갈 경로로 간주됩니다.
+
+ 기본값은 `0`입니다.
+ */
+@property (nonatomic) double progress;
+
+/**
+ 패턴 이미지의 간격. pt 단위. `0`일 경우 패턴을 표시하지 않습니다.
+
+ 기본값은 `25`입니다.
+ */
+@property (nonatomic) NSUInteger patternInterval;
+
+/**
+ 패턴 이미지. 패턴 이미지의 크기가 경로선의 두께보다 클 경우 경로선의 두께에 맞게 축소됩니다.
+ `nil`일 경우 패턴을 표시하지 않습니다.
+ */
+@property (nonatomic, strong, nullable) NMFOverlayImage *patternIcon;
+
+/**
+ 경로선과 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedSymbols;
+
+/**
+ 경로선과 마커가 겹칠 경우 마커를 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedMarkers;
+
+/**
+ 경로선과 마커의 캡션이 겹칠 경우 마커의 캡션을 숨길지 여부.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic) BOOL isHideCollidedCaptions;
+
+/**
+ 좌표열을 지정하여 경로선 오버레이를 생성합니다. `coords`의 크기는 `2` 이상이어야 합니다.
+
+ 사용 예시
+ ```
+ NMFLatLng *p1 = [[NMFLatLng alloc]initWithLat:37.20 lng:127.051]];
+ NMFLatLng *p2 = [[NMFLatLng alloc]initWithLat:37.21 lng:127.052]];
+ NMFLatLng *p3 = [[NMFLatLng alloc]initWithLat:37.22 lng:127.053]];
+ NMFPath *route = [NMFPath pathWithPoints:@[p1, p2, p3]];
+ route.mapView = mapView;
+ ```
+
+ @param coords 좌표열.
+ @return `NMFPath` 객체.
+ */
++ (nullable instancetype)pathWithPoints:(NSArray *)coords;
+
+/**
+ `NMGLineString`을 지정하여 경로선 오버레이를 생성합니다.
+ `NMGLineString`객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다.
+
+ @param path `NMGLineString` 객체.
+ @return `NMFPath` 객체.
+ */
++ (nullable instancetype)pathWithLineString:(NMGLineString *)path;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPathColor.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPathColor.h
new file mode 100644
index 00000000..ff64d78b
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPathColor.h
@@ -0,0 +1,58 @@
+#import
+
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ NMFPath, NMFMultipartPath의 색상을 지정하는 클래스.
+ */
+NMF_EXPORT
+@interface NMFPathColor : NSObject
+
+/**
+ 경로선의 색상. 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의
+ 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 그려지지 않습니다.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *color;
+
+/**
+ 경로선의 테두리 색상. 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야
+ 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *outlineColor;
+
+/**
+ 지나온 경로선의 색상. 지나온 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야
+ 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도
+ 그려지지 않습니다.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *passedColor;
+
+/**
+ 지나온 경로선의 테두리 색상. 지나온 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나
+ 완전히 불투명해야 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할
+ 경우 테두리도 그려지지 않습니다.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property (nonatomic, strong) UIColor *passedOutlineColor;
+
++ (instancetype)pathColorWithColor:(UIColor *)color;
+
++ (instancetype)pathColorWithColor:(UIColor *)color
+ outlineColor:(UIColor *)outlineColor;
+
++ (instancetype)pathColorWithColor:(UIColor *)color
+ outlineColor:(UIColor *)outlineColor
+ passedColor:(UIColor *)passedColor
+ passedOutlineColor:(UIColor *)passedOutlineColor;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPickable.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPickable.h
new file mode 100644
index 00000000..36e3d3ef
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPickable.h
@@ -0,0 +1,9 @@
+#import
+
+#import "NMFFoundation.h"
+
+/**
+ 피킹이 가능한 지도 요소를 정의한 프로토콜.
+ */
+@protocol NMFPickable
+@end
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolygonOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolygonOverlay.h
new file mode 100644
index 00000000..cdb0f4a9
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolygonOverlay.h
@@ -0,0 +1,79 @@
+#import
+#import
+
+#import "NMFGeometry.h"
+#import "NMFOverlay.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 기본 폴리곤 오버레이 전역 Z 인덱스
+ */
+const static int NMF_POLYGON_OVERLAY_GLOBAL_Z_INDEX = -200000;
+
+@class NMGPolygon;
+
+/**
+ 지도에 도형을 나타내는 오버레이.
+ */
+NMF_EXPORT
+@interface NMFPolygonOverlay : NMFOverlay
+
+/**
+ 폴리곤 오버레이의 모양을 결정하는 폴리곤 객체.
+ 폴리곤 오버레이를 생성한 이후 폴리곤을 갱신하기 위한 목적으로 사용할 수 있습니다.
+ */
+@property (nonatomic) NMGPolygon *polygon;
+
+/**
+ 면의 색상.
+
+ 기본값은 `UIColor.whiteColor`입니다.
+ */
+@property (nonatomic, copy) UIColor *fillColor;
+
+/**
+ 테두리의 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다.
+
+ 기본값은 `0`입니다.
+ */
+@property (nonatomic) NSUInteger outlineWidth;
+
+/**
+ 테두리의 색상.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property (nonatomic, copy) UIColor *outlineColor;
+
+/**
+ 폴리곤 객체와 색상을 지정하여 폴리곤 오버레이를 생성합니다.
+ 폴리곤 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다.
+
+ @param polygon 폴리곤 객체.
+ @param fillColor 폴리곤을 채울 색상.
+ @return `NMFPolygonOverlay` 객체.
+ */
++ (nullable instancetype)polygonOverlay:(NMGPolygon *)polygon fillColor:(UIColor *)fillColor;
+
+/**
+ 폴리곤 객체를 지정하여 폴리곤 오버레이를 생성합니다.
+ 폴리곤 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다.
+
+ @param polygon 폴리곤 객체.
+ @return `NMFPolygonOverlay` 객체.
+ */
++ (nullable instancetype)polygonOverlay:(NMGPolygon *)polygon;
+
+/**
+ 외곽선 정점 배열을 지정하여 폴리곤 오버레이를 생성합니다.
+ `coords`의 크기는 `2` 이상이어야 합니다.
+
+ @param coords `NMGLatLng` 배열.
+ @return `NMFPolygonOverlay` 객체.
+ */
++ (nullable instancetype)polygonOverlayWith:(NSArray *)coords;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolylineOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolylineOverlay.h
new file mode 100644
index 00000000..477af23f
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolylineOverlay.h
@@ -0,0 +1,91 @@
+#import
+#import
+
+#import "NMFOverlay.h"
+
+/**
+ 기본 폴리라인 오버레이 전역 Z 인덱스
+ */
+const static int NMF_POLYLINE_OVERLAY_GLOBAL_Z_INDEX = -200000;
+
+@class NMGLineString;
+
+#define NMFDefaultLinePattern @[@2,@1];
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 지도에 선을 나타내는 오버레이.
+ */
+NMF_EXPORT
+@interface NMFPolylineOverlay : NMFOverlay
+
+/**
+ 두께. pt 단위.
+
+ 기본값은 `2.5`입니다.
+ */
+@property(nonatomic) CGFloat width;
+
+/**
+ 색상.
+
+ 기본값은 `UIColor.blackColor`입니다.
+ */
+@property(nonatomic, copy) UIColor *color;
+
+/**
+ 끝 지점의 모양.
+
+ 기본값은 `NMFOverlayLineCapButt`입니다.
+ */
+@property(nonatomic) NMFOverlayLineCap capType;
+
+/**
+ 연결점의 모양.
+
+ 기본값은 `NMFOverlayLineJoinMiter`입니다.
+ */
+@property(nonatomic) NMFOverlayLineJoin joinType;
+
+/**
+ 점선 패턴. 패턴은 pt 단위의 배열로 표현되며, 각각 `2n`번째 요소는 실선의 길이,
+ `2n + 1`번째 요소는 공백의 길이를 의미하며 빈 리스트를 입력할 경우 실선을 의미합니다.
+ */
+@property(nonatomic) NSArray *pattern;
+
+/**
+ 선 오버레이를 나타내는 `NMGLineString`객체.
+ 선 오버레이를 생성한 이후 폴리라인을 갱신하기 위한 목적으로 사용할 수 있습니다.
+ */
+@property(nonatomic) NMGLineString *line;
+
+/**
+ 좌표열을 지정하여 선 오버레이를 생성합니다. `coords`의 크기는 `2` 이상이어야 합니다.
+
+ 사용 예시
+ ```
+ NMGLatLng *p1 = [[NMGLatLng alloc]initWithLat:37.20 lng:127.051]];
+ NMGLatLng *p2 = [[NMGLatLng alloc]initWithLat:37.21 lng:127.052]];
+ NMGLatLng *p3 = [[NMGLatLng alloc]initWithLat:37.22 lng:127.053]];
+ NMFPolylineOverlay *line = [NMFPolylineOverlay polylineOverlayWithPoints:@[p1, p2, p3]];
+ [mapView addOverlay:line];
+ ```
+
+ @param coords 좌표열.
+ @return `NMFPolylineOverlay` 객체.
+ */
++ (nullable instancetype)polylineOverlayWith:(NSArray *)coords;
+
+/**
+ 폴리라인 객체를 지정하여 선 오버레이를 생성합니다.
+ 폴리라인 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다.
+
+ @param polyline 폴리라인 객체.
+ @return `NMFPolylineOverlay` 객체.
+ */
++ (nullable instancetype)polylineOverlay:(NMGLineString *)polyline;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFProjection.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFProjection.h
new file mode 100644
index 00000000..48474ea7
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFProjection.h
@@ -0,0 +1,94 @@
+#import
+#import
+
+#import "NMFFoundation.h"
+
+@class NMFMapView;
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 지리적 좌표와 화면 좌표 간의 변환을 담당하는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없고
+ `NMFMapView.projection`을 이용해서 가져올 수 있습니다.
+ */
+NMF_EXPORT
+@interface NMFProjection : NSObject
+
+/**
+ 화면 좌표를 위경도 좌표로 변환합니다.
+
+ @param point 화면 좌표.
+ @return 위경도 좌표. `point`가 `nil`이거나 화면 좌표의 범위가 위경도 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`NMGLatLng.isValid()`가 `NO`인) 좌표가 반환됩니다.
+ */
+- (NMGLatLng *)latlngFromPoint:(CGPoint)point;
+
+/**
+ 화면 좌표를 카메라가 지정된 줌 레벨, 틸트/베어링 각도일 때의 위경도 좌표로 변환합니다. 일반적인 상황에는 `-latlngFromPoint:point:`를 사용하세요.
+
+ @param point 화면 좌표.
+ @param zoom 줌 레벨.
+ @param tilt 틸트 각도.
+ @param heading 헤딩 각도.
+ @param wrap 좌표를 랩핑할지 여부.
+ @return 위경도 좌표. `point`가 `nil`이거나 화면 좌표의 범위가 위경도 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`NMGLatLng.isValid()`가 `NO`인) 좌표가 반환됩니다.
+ */
+- (NMGLatLng *)latlngFromPoint:(CGPoint)point atZoom:(double)zoom atTilt:(double)tilt atHeading:(double)heading withWrap:(BOOL)wrap;
+
+/**
+ 위경도 좌표를 화면 좌표로 변환합니다.
+
+ @param coord 위경도 좌표.
+ @return 화면 좌표. `coord`가 `nil`이거나, 위경도 좌표의 범위가 화면 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`CGPoint.x` 또는 `CGPoint.y`가 무한대인) 좌표가 반환됩니다.
+ */
+- (CGPoint)pointFromLatLng:(NMGLatLng *)coord;
+
+/**
+ 위경도 좌표를 카메라가 지정된 줌 레벨, 틸트/베어링 각도일 때의 화면 좌표로 변환합니다. 일반적인 상황에는 `-pointFromLatLng:coord:`를 사용하세요.
+
+ @param coord 위경도 좌표.
+ @param zoom 줌 레벨.
+ @param tilt 틸트 각도.
+ @param heading 헤딩 각도.
+ @param shortestPath 가까운 좌표를 사용할지 여부.
+ @return 화면 좌표. `coord`가 `nil`이거나, 위경도 좌표의 범위가 화면 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`CGPoint.x` 또는 `CGPoint.y`가 무한대인) 좌표가 반환됩니다.
+ */
+- (CGPoint)pointFromLatLng:(NMGLatLng *)coord atZoom:(double)zoom atTilt:(double)tilt atHeading:(double)heading withShortestPath:(BOOL)shortestPath;
+
+/**
+ 화면의 영역을 위경도 영역으로 변환합니다.
+
+ @param viewBounds 화면 영역.
+ @return 위경도 영역.
+ */
+- (NMGLatLngBounds *)latlngBoundsFromViewBounds:(CGRect)viewBounds;
+
+/**
+ 위경도 영역을 화면 영역으로 변환합니다.
+
+ @param latlngBounds 위경도 영역.
+ @return 화면 영역.
+ */
+- (CGRect)viewBoundsFromLatLngBounds:(NMGLatLngBounds *)latlngBounds;
+
+/**
+ 현재 지도의 축척을 반환합니다.
+
+ @return 축척. 미터/픽셀 단위.
+ */
+- (CLLocationDistance)metersPerPixel;
+
+/**
+ 카메라의 위도가 `latitude`, 줌 레벨이 `zoom`일 때의 축적을 반환합니다.
+
+ @param latitude 위도.
+ @param zoom 줌 레벨.
+ @return 축척. 미터/픽셀 단위.
+ */
+- (CLLocationDistance)metersPerPixelAtLatitude:(double)latitude zoom:(double)zoom;
+
+@end
+NS_ASSUME_NONNULL_END
+
+
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFRendererOptions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFRendererOptions.h
new file mode 100644
index 00000000..66bfedd2
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFRendererOptions.h
@@ -0,0 +1,48 @@
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 렌더러 유형.
+ */
+typedef NS_ENUM(NSInteger, NMFRendererType) {
+ /**
+ OpenGL ES 2.0.
+ */
+ NMFRendererTypeOpenGL,
+
+ /**
+ Metal.
+ */
+ NMFRendererTypeMetal
+};
+
+/**
+ 지도의 렌더링 관련 옵션을 지정하는 클래스. 지도 객체가 생성된 후에는 속성을 변경해도 지도에 적용되지 않습니다.
+ 이 클래스는 싱글턴 클래스로, `shared`를 이용해 인스턴스를 가져올 수 있습니다.
+ */
+NMF_EXPORT
+@interface NMFRendererOptions : NSObject
+
+/**
+ 싱글턴 인스턴스.
+ */
+@property (class, nonatomic, readonly, nonnull) NMFRendererOptions *shared;
+
+/**
+ 지도 렌더러 유형을 지정하거나 반환합니다. 디바이스가 `NMFRendererTypeMetal`을 지원하지 않으면 `NMFRendererTypeOpenGL`이 지정됩니다.
+
+ 시뮬레이터에서 구동하는 경우의 기본값은 `NMFRendererTypeMetal`, 디바이스에서 구동하는 경우의 기본값은 `NMFRendererTypeOpenGL` 입니다.
+ */
+@property (nonatomic, assign) NMFRendererType rendererType;
+
+/**
+ 4x MSAA를 적용할지 여부를 지정하거나 반환합니다.
+
+ 기본값은 `NO`입니다.
+ */
+@property (nonatomic, assign) BOOL msaa4x;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFScaleView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFScaleView.h
new file mode 100644
index 00000000..a5e027e5
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFScaleView.h
@@ -0,0 +1,29 @@
+#import
+
+#import "NMFFoundation.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class NMFMapView;
+
+/**
+ 축척 바 컨트롤.
+ */
+NMF_EXPORT
+@interface NMFScaleView : UIView
+
+/**
+ 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다.
+
+ 기본값은 `nil`입니다.
+ */
+@property (nonatomic, weak, nullable) NMFMapView *mapView;
+
+/**
+ 축척 바의 너비에 대한 `NSLayoutConstraint` 객체.
+ */
+@property (nonatomic, weak, nullable) IBOutlet NSLayoutConstraint *scaleBarWidthConstraint;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFSymbol.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFSymbol.h
new file mode 100644
index 00000000..0be65254
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFSymbol.h
@@ -0,0 +1,28 @@
+#import
+
+#import "NMFPickable.h"
+
+@class NMGLatLng;
+
+/**
+ 지도 위의 아이콘, 텍스트 등 피킹 가능한 심벌을 나타내는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없으며, 두 가지
+ 방법으로 얻을 수 있습니다.
+ - `NMFMapViewTouchDelegate`의 `-mapView:didTapSymbol:`을 이용해 사용자가 클릭한 심벌 수신
+ - `NMFMapView`의 `-pickAll:withTolerance:`를 이용해 특정 화면 좌표 주변의 심벌을 쿼리
+
+ - SeeAlso: `NMFPickable`
+ */
+NMF_EXPORT
+@interface NMFSymbol : NSObject
+
+/**
+ 심벌의 좌표.
+ */
+@property(nonatomic, readonly) NMGLatLng *position;
+
+/**
+ 캡션 문자열. 캡션이 없는 심벌일 경우 빈 문자열을 반환합니다.
+ */
+@property(nonatomic, readonly) NSString *caption;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileCoverHelper.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileCoverHelper.h
new file mode 100644
index 00000000..fb13d5ed
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileCoverHelper.h
@@ -0,0 +1,73 @@
+#import "NMFFoundation.h"
+
+@class NMFMapView;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ 타일 목록에 변경이 일어남에 대한 이벤트를 받을 델리게이트.
+ */
+
+@protocol NMFTileCoverHelperDelegate
+
+/**
+ 타일 목록에 변경이 일어나면 호출되는 콜백 메서드.
+
+ @param addedTileIds 화면에 추가된 타일 ID의 목록.
+ @param removedTileIds 화면에서 제거된 타일 ID의 목록.
+ */
+- (void)onTileChanged:(NSArray * _Nullable)addedTileIds RemovedTileIds:(NSArray * _Nullable)removedTileIds;
+
+@end
+
+/**
+ 지도 화면을 커버하는 타일의 목록을 관리하며 변경이 일어나면 이벤트를 발생시키는 유틸리티 클래스.
+
+ `NMFTileCoverHelperDelegate`로 델리게이트를 지정하고 `mapView` 속성에 대상 지도 객체를 지정하면 지도
+ 화면을 커버하는 타일의 목록이 변경될 때마다 `-onTileChanged::`가 호출됩니다. 화면에 추가된
+ 타일 영역에 대해서 데이터를 가져오고 제거된 타일 영역의 데이터는 제거하는 등의 작업을 할 경우, 이 클래스를 사용하면
+ 전체 타일 대신 변경사항이 있는 타일만을 처리하면 되므로 `-getCoveringTileIds`를 직접 사용하는 것에
+ 비해 효율적입니다.
+ */
+NMF_EXPORT
+@interface NMFTileCoverHelper : NSObject
+
+/**
+ 타일 목록에 변경이 일어남에 대한 이벤트를 받을 델리게이트 객체.
+ */
+@property(nonatomic, weak) id delegate;
+
+/**
+ 이벤트를 받아올 지도 객체.
+ */
+@property(nonatomic, weak) NMFMapView *mapView;
+
+/**
+ 타일 목록을 갱신할 때 `-mapViewCameraIdle:` 대신 `-mapView:cameraIsChangingByReason:`을 사용할지 여부를 설정합니다.
+ `-mapView:cameraIsChangingByReason:`을 사용하면 목록이 더 빠르게 갱신되지만 성능이 하락합니다.
+ 기본값 `NO`.
+ */
+@property(nonatomic) BOOL isUpdateOnChange;
+
+/**
+ 최소 줌 레벨을 지정 합니다.
+ 기본값 `NMF_MIN_ZOOM`.
+ */
+@property(nonatomic) NSInteger minZoom;
+
+/**
+ 최대 줌 레벨을 지정 합니다.
+ 기본값 `NMF_MAX_ZOOM`.
+ */
+@property(nonatomic) NSInteger maxZoom;
+
+/**
+ 지도 객체를 지정하여 타일 커버 헬퍼를 생성합니다.
+
+ @param mapView 지도 객체.
+ */
++ (instancetype)tileCoverHelperWith:(NMFMapView * _Nonnull)mapView;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileId.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileId.h
new file mode 100644
index 00000000..383e374a
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileId.h
@@ -0,0 +1,86 @@
+#import "NMFFoundation.h"
+
+@class NMGWebMercatorCoord;
+@class NMGLatLng;
+@class NMGLatLngBounds;
+
+/**
+ 타일 ID를 다루는 클래스. 타일 ID는 정수 단위의 줌 레벨을 의미하는 `z` 성분, `x`축 인덱스를
+ 의미하는 `x` 성분, `y`축 인덱스를 의미하는 `y` 성분으로 구성되며, 각 성분을 조합한
+ `long` 타입으로 표현됩니다. 이 클래스의 메서드를 사용해 `long` 타입의 타일 ID로부터 각 성분을
+ 추출하거나 각 성분으로부터 타일 ID를 조합할 수 있습니다.
+ */
+NMF_EXPORT
+@interface NMFTileId : NSObject
+
+/**
+ `tileId`의 `z` 성분을 반환합니다.
+
+ @param tileId 타일 ID.
+ @return `z` 성분.
+ */
++ (NSUInteger)z:(long)tileId;
+
+/**
+ `tileId`의 `x` 성분을 반환합니다.
+
+ @param tileId 타일 ID.
+ @return `x` 성분.
+ */
++ (NSUInteger)x:(long)tileId;
+
+/**
+ `tileId`의 `y` 성분을 반환합니다.
+
+ @param tileId 타일 ID.
+ @return `y` 성분.
+ */
++ (NSUInteger)y:(long)tileId;
+
+/**
+ `z`, `x`, `y` 성분을 조합한 타일 ID를 반환합니다.
+
+ @param z `z` 성분.
+ @param x `x` 성분.
+ @param y `y` 성분.
+ @return 타일 ID.
+ */
++ (long)tileIdFromZ:(NSUInteger)z X:(NSUInteger)x Y:(NSUInteger)y;
+
+/**
+ `coord` 좌표가 위치한 곳의 `z` 레벨 타일 ID를 반환합니다.
+
+ @param z 줌 레벨.
+ @param coord 좌표.
+ @return 타일 ID.
+ */
++ (long)tileIdFromZ:(NSUInteger)z WithCoord:(NMGWebMercatorCoord * _Nonnull)coord;
+
+/**
+ `latLng` 좌표가 위치한 곳의 `z` 레벨 타일 ID를 반환합니다.
+
+ @param z 줌 레벨.
+ @param latLng 좌표.
+ @return 타일 ID.
+ */
++ (long)tileIdFromZ:(NSUInteger)z WithLatLng:(NMGLatLng * _Nonnull)latLng;
+
+/**
+ `tileId` 타일의 영역을 반환합니다.
+
+ @param tileId 타일 ID.
+ @return 영역.
+ */
++ (NMGLatLngBounds * _Nonnull)toLatLngBoundsFromTileId:(long)tileId;
+
+/**
+ `z`, `x`, `y` 성분을 조합한 타일의 영역을 반환합니다.
+
+ @param z `z` 성분.
+ @param x `x` 성분.
+ @param y `y` 성분.
+ @return 영역.
+ */
++ (NMGLatLngBounds * _Nonnull)toLatLngBoundsFromZ:(NSUInteger)z X:(NSUInteger)x Y:(NSUInteger)y;
+
+@end
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTypes.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTypes.h
new file mode 100644
index 00000000..6b0f2d11
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTypes.h
@@ -0,0 +1,112 @@
+#import
+#import
+
+#import "NMFFoundation.h"
+
+#pragma once
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NSString *NMFExceptionName NS_TYPED_EXTENSIBLE_ENUM;
+
+/**
+ :nodoc: Generic exceptions used across multiple disparate classes. Exceptions
+ that are unique to a class or class-cluster should be defined in those headers.
+ */
+extern NMF_EXPORT NMFExceptionName const NMFAbstractClassException;
+
+/** Indicates an error occurred in the Mapbox SDK. */
+extern NMF_EXPORT NSErrorDomain const NMFErrorDomain;
+
+/** Error constants for the Mapbox SDK. */
+typedef NS_ENUM(NSInteger, NMFErrorCode) {
+ /** An unknown error occurred. */
+ NMFErrorCodeUnknown = -1,
+ /** The resource could not be found. */
+ NMFErrorCodeNotFound = 1,
+ /** The connection received an invalid server response. */
+ NMFErrorCodeBadServerResponse = 2,
+ /** An attempt to establish a connection failed. */
+ NMFErrorCodeConnectionFailed = 3,
+ /** A style parse error occurred while attempting to load the map. */
+ NMFErrorCodeParseStyleFailed = 4,
+ /** An attempt to load the style failed. */
+ NMFErrorCodeLoadStyleFailed = 5,
+ /** An error occurred while snapshotting the map. */
+ NMFErrorCodeSnapshotFailed = 6,
+ /** Source is in use and cannot be removed */
+ NMFErrorCodeSourceIsInUseCannotRemove = 7,
+ /** Source is in use and cannot be removed */
+ NMFErrorCodeSourceIdentifierMismatch = 8,
+ /** An error occurred while modifying the offline storage database */
+ NMFErrorCodeModifyingOfflineStorageFailed = 9,
+ /** Source is invalid and cannot be removed from the style (e.g. after a style change) */
+ NMFErrorCodeSourceCannotBeRemovedFromStyle = 10,
+ /** An error occurred while rendering */
+ NMFErrorCodeRenderingError = 11,
+};
+
+/** Options for enabling debugging features in an `NMFMapView` instance. */
+typedef NS_OPTIONS(NSUInteger, NMFMapDebugMaskOptions) {
+ /** Edges of tile boundaries are shown as thick, red lines to help diagnose
+ tile clipping issues. */
+ NMFMapDebugTileBoundariesMask = 1 << 1,
+ /** Each tile shows its tile coordinate (x/y/z) in the upper-left corner. */
+ NMFMapDebugTileInfoMask = 1 << 2,
+ /** Each tile shows a timestamp indicating when it was loaded. */
+ NMFMapDebugTimestampsMask = 1 << 3,
+ /** Edges of glyphs and symbols are shown as faint, green lines to help
+ diagnose collision and label placement issues. */
+ NMFMapDebugCollisionBoxesMask = 1 << 4,
+ /** Each drawing operation is replaced by a translucent fill. Overlapping
+ drawing operations appear more prominent to help diagnose overdrawing.
+ @note This option does nothing in Release builds of the SDK. */
+ NMFMapDebugOverdrawVisualizationMask = 1 << 5,
+#if !TARGET_OS_IPHONE
+ /** The stencil buffer is shown instead of the color buffer.
+ @note This option does nothing in Release builds of the SDK. */
+ NMFMapDebugStencilBufferMask = 1 << 6,
+ /** The depth buffer is shown instead of the color buffer.
+ @note This option does nothing in Release builds of the SDK. */
+ NMFMapDebugDepthBufferMask = 1 << 7,
+#endif
+};
+
+/**
+ A structure containing information about a transition.
+ */
+typedef struct __attribute__((objc_boxable)) NMFTransition {
+ /**
+ The amount of time the animation should take, not including the delay.
+ */
+ NSTimeInterval duration;
+
+ /**
+ The amount of time in seconds to wait before beginning the animation.
+ */
+ NSTimeInterval delay;
+} NMFTransition;
+
+NS_INLINE NSString *NMFStringFromNMFTransition(NMFTransition transition) {
+ return [NSString stringWithFormat:@"transition { duration: %f, delay: %f }", transition.duration, transition.delay];
+}
+
+/**
+ Creates a new `NMFTransition` from the given duration and delay.
+
+ @param duration The amount of time the animation should take, not including
+ the delay.
+ @param delay The amount of time in seconds to wait before beginning the
+ animation.
+
+ @return Returns a `NMFTransition` struct containing the transition attributes.
+ */
+NS_INLINE NMFTransition NMFTransitionMake(NSTimeInterval duration, NSTimeInterval delay) {
+ NMFTransition transition;
+ transition.duration = duration;
+ transition.delay = delay;
+
+ return transition;
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFUtils.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFUtils.h
new file mode 100644
index 00000000..640139b6
--- /dev/null
+++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFUtils.h
@@ -0,0 +1,61 @@
+#import
+#import
+#import
+
+#import "NMFMapView.h"
+
+NS_INLINE CGFloat ScreenScaleFactor() {
+ static dispatch_once_t onceToken;
+ static CGFloat screenFactor;
+
+ dispatch_once(&onceToken, ^{
+ screenFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ?
+ [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale];
+ });
+
+ return screenFactor;
+};
+
+/**
+ 지오메트리 관련 유틸리티를 제공하는 클래스.
+ */
+NMF_EXPORT
+@interface NMFGeometryUtils : NSObject
+
+/**
+ `NMGLatLng` 배열로 구성된 경로선에서 대상 좌표에 가장 근접한 지점의 진척률을 반환합니다.
+
+ @param latLngs `NMGLatLng` 배열로 구성된 경로선.
+ @param targetLatLng 대상 좌표.
+ @return 진척률.
+ */
++(double)progressWithLatLngs:(NSArray