Compare commits

...

27 Commits

Author SHA1 Message Date
39333e5fd8 修复相机历史导入页网格缩略图重叠与溢出问题。
采用 1:1 方形容器约束单元格布局,并统一网格间距与边距常量。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 11:49:01 +08:00
be9c844bd3 将 otg_swift OTG 引擎迁入 Core/CameraOTG,并接入旅拍有线传图与历史导入。
恢复 USB 相机连接、边拍边传、三品牌驱动与 SwiftUI 历史导入页,通过适配层对接现有本地上传与 OSS 管道。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 11:22:07 +08:00
d7fec35715 移除 Core 层 OTG 相机实现,保留旅拍有线传图 UI 与本地照片上传能力。
将本地存储与上传编排下沉到 Features/TravelAlbum,删除 USB/PTP 相关代码与测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 10:55:40 +08:00
a0549e068a 彻底清理 promotion_page 残留引用,移除 hiddenHomeMenuURIs 机制。
宣传页已从白名单、菜单构建与文档中完全删除,不再保留专用隐藏逻辑。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 20:51:27 +08:00
9df4c4f6e8 移除 ScenicPromotion 宣传页模块,并隐藏首页 promotion_page 入口。
删除 Mock 模块、图片资源与路由;从常用菜单白名单剔除该权限,后端仍下发时客户端静默忽略。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 20:48:37 +08:00
49e997ddba 修复合作获客扫码绑定崩溃与 Toast 层级,并接入分成比例修改。
将扫码页提升到列表层弹出并补齐 AppDelegate.window,避免扫码时 UIKit 取主窗口崩溃;Toast 改用独立 UIWindow 显示在 sheet 之上;合作获客员支持短信验证修改分成比例,同时优化冷启动根视图创建时机并补充相关测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 20:37:24 +08:00
00c3cd0a93 接入友盟统计与 U-APM,并优化宣传页打卡点标签交互。
友盟 SDK 改为隐私同意后再初始化;宣传页标签新增滑块位移动画,超过 5 个时选中项自动滚动居中。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 09:23:15 +08:00
c7f557f361 完善合作获客员备注名:保存时校验长度,弹窗展示 saler_real_name。
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 17:57:17 +08:00
328c4321f4 拆分宣传页视图并扩充 Mock 数据,合作订单支持获客员备注名并修复线索图片网格尺寸。
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 17:43:04 +08:00
1b1e93b9ca 新增宣传页 Mock 模块并接入首页路由。
从 xh_test 同步 ScenicPromotion 演示页,补齐 MVVM 结构、本地资源、单元测试与模块文档,注册 promotion_page 首页入口。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 15:29:25 +08:00
a528d9b0d7 接入微信分享 SDK 并配置 Universal Link。
集成 WechatOpenSDK、www.zhifly.cn/suixinkan/ 通用链接与邀请页分享能力,附带 AASA 部署文件与单元测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 15:02:37 +08:00
5d34cda730 移除账号切换成功后的 Toast 提示。
切换完成后直接返回首页即可,无需额外弹窗确认。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 17:29:10 +08:00
5ab9b1b324 修复账号切换后「我的」页当前账号展示错误,并统一举报摄影师首页 URI。
切换账号时以用户选中账号为准写入展示标题与业务作用域,避免沿用旧门店名称;同时将首页举报摄影师入口 URI 对齐为 report_photographer。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 17:21:04 +08:00
fcb86d43f5 新增举报摄影师模块并接入首页路由,桌面应用名改为随心瞰商家版。
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 16:51:22 +08:00
19d681192c 修复 OTG 列表删除照片后边拍边传仍会带回已删项的问题。
删除时同步清理管道任务并维护 excludedAssetIDs,避免 notify 将无本地文件的旧任务重新展示为仅文件名的待上传项。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 15:58:25 +08:00
90d135b5ac 完善 OTG 相机有线传图:支持 Sony/Canon 自动识别,页面 detach 保持会话以便再次进入复连。
引入进程级 CameraTetheringSession 与共享 USB Browser;离开传图页仅取消 UI 回调,App 终止时再完整 shutdown 释放 PTP 与 Browser 资源。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 15:45:35 +08:00
5f7ef24683 按账号与相册隔离相机下载目录,并同步更新传输管道与测试。
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 15:55:54 +08:00
660852ffad 增强有线传图手动上传并发能力,并稳定列表行布局。
指定/勾选/批量上传支持恢复仅本地持久化的待传照片,手动上传与 pipeline 均按 3 路并发;pipeline 任务签名去重避免状态回退,照片行固定高度并预留进度条占位。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 15:10:47 +08:00
5ebcec1cfc 修复边拍边传自动上传范围,并避免上传状态被旧快照回退。
拍后传输下载的历史照片切换模式后不再自动补传;刷新相机文件仅同步本地。重试上传后刷新单张状态,并忽略乱序 pipeline 通知导致的已上传回退。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 14:50:45 +08:00
ceac8ba67e 优化有线传图页设备展示,并缓存传输模式选项。
未连接状态改为「未连接相机」;设备型号映射为可读名称而非 iPhone12,1 等内部代号;边拍边传/拍后传输按账号持久化并在下次进入时恢复。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 14:07:34 +08:00
28db8b3182 优化相册管理与指定上传弹层展示逻辑。
相册详情网格仅对已购买素材显示角标;指定上传 Sheet 改用 NavigationStack 与系统 navigationTitle。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 14:00:46 +08:00
5e620623eb 对齐旅拍相册详情页 Android UI,并修复网格预览与布局问题。
重构相册详情为信息卡片、Tab 筛选、排序、批量删除与底部上传栏;修复网格重叠、禁用按钮蒙层,并支持点击预览大图。同步扩展素材列表 API 与 ViewModel 分页逻辑,并优化有线传图缩略图与传输性能。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 13:53:59 +08:00
c71b45bdfd 对齐有线传图页 Android UI,并改用相对路径持久化本地照片。
还原顶栏、浮动卡片、时间侧栏与底部交互;照片路径改为 CameraDownloads 相对路径并兼容旧数据;格式 Chip 固定 JPG 且不可点击。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 11:16:28 +08:00
e91a46c315 修复有线传图新拍照片不显示,并优化旅拍相册列表交互。
未绑定相册的新拍照片被错误过滤导致列表始终为空;同时调整入口卡片点击区域与详情素材网格布局。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 10:20:26 +08:00
6769be60e4 修复旅拍相册 API 未注入共享 APIClient 导致未登录错误。
在 RootView 注入 travelAlbumAPI,并将 travel_album 纳入首页常用功能;补充 App/Networking 依赖注入说明。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 10:07:32 +08:00
258c438f9a 优化冷启动流程:Launch Screen 对齐 Splash,仅阻塞 rolePermissions。
移除 SplashCoordinator,bootstrap 期间用 SplashView 覆盖避免空白闪屏,其余账号数据改为后台补充刷新。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 09:56:49 +08:00
d2fe5d71e4 Add TravelAlbum, ProfileSpace, and wired camera transfer modules.
Introduce travel album entry with Sony PTP tethering pipeline, profile space settings page, home routing updates, Launch Screen storyboard, and related tests/docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 09:41:05 +08:00
329 changed files with 33224 additions and 993 deletions

42
Podfile
View File

@ -8,19 +8,34 @@ target 'suixinkan' do
pod 'AMapSearch-NO-IDFA', '~> 9.7'
pod 'AMapLocation-NO-IDFA', '~> 2.11'
# 微信 Open SDK分享能力不调用支付 API
pod 'WechatOpenSDK-XCFramework', '~> 2.0.4'
# 友盟 SDK统计分析与应用性能监控初始化需等用户同意隐私政策后再触发
pod 'UMCommon'
pod 'UMDevice'
pod 'UMAPM'
target 'suixinkanTests' do
inherit! :search_paths
end
end
# 模拟器可用的链接参数(不含高德 prebuilt framework
SIMULATOR_OTHER_LDFLAGS = <<~FLAGS.squish
-ObjC -l"c++" -l"z"
-framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony"
-framework "CoreText" -framework "ExternalAccessory" -framework "GLKit"
-framework "OpenGLES" -framework "QuartzCore" -framework "Security"
-framework "SystemConfiguration"
FLAGS
AMAP_SIMULATOR_FRAMEWORK_NAMES = %w[
AMapFoundationKit
AMapLocationKit
AMapSearchKit
MAMapKit
].freeze
def other_ldflags_without_amap(other_ldflags)
stripped = other_ldflags.dup
AMAP_SIMULATOR_FRAMEWORK_NAMES.each do |framework_name|
stripped = stripped.gsub(/ -framework "#{Regexp.escape(framework_name)}"/, '')
end
stripped
end
post_install do |installer|
# 1. 修正 aggregate xcconfig去掉 arm64 排除,模拟器单独链接(不链 AMap
@ -30,9 +45,14 @@ post_install do |installer|
content = File.read(path)
content.gsub!("EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64\n", '')
unless content.include?('OTHER_LDFLAGS[sdk=iphonesimulator*]')
content << "\nOTHER_LDFLAGS[sdk=iphonesimulator*] = #{SIMULATOR_OTHER_LDFLAGS}\n"
content << "FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited)\n"
# 模拟器剥离高德 framework但保留 CocoaPods 生成的微信、友盟和其他依赖链接参数。
# 真机条件下再补回完整链接参数,避免真机能力受影响。
if (device_ldflags = content[/^OTHER_LDFLAGS = (.*)$/, 1])
simulator_ldflags = other_ldflags_without_amap(device_ldflags)
content.gsub!(/^OTHER_LDFLAGS = .*\n/, "OTHER_LDFLAGS = #{simulator_ldflags}\n")
content.gsub!(/OTHER_LDFLAGS\[sdk=iphonesimulator\*\] = .*\n/, '')
content.gsub!(/OTHER_LDFLAGS\[sdk=iphoneos\*\] = .*\n/, '')
content << "\nOTHER_LDFLAGS[sdk=iphoneos*] = #{device_ldflags}\n"
end
File.write(path, content)

View File

@ -6,11 +6,21 @@ PODS:
- AMapFoundation-NO-IDFA (>= 1.8.7)
- AMapSearch-NO-IDFA (9.7.5):
- AMapFoundation-NO-IDFA (>= 1.8.0)
- UMAPM (2.0.7):
- UMCommon
- UMCommon (7.5.11):
- UMDevice
- UMDevice (3.6.0)
- WechatOpenSDK-XCFramework (2.0.5)
DEPENDENCIES:
- AMap3DMap-NO-IDFA (~> 11.1)
- AMapLocation-NO-IDFA (~> 2.11)
- AMapSearch-NO-IDFA (~> 9.7)
- UMAPM
- UMCommon
- UMDevice
- WechatOpenSDK-XCFramework (~> 2.0.4)
SPEC REPOS:
trunk:
@ -18,13 +28,21 @@ SPEC REPOS:
- AMapFoundation-NO-IDFA
- AMapLocation-NO-IDFA
- AMapSearch-NO-IDFA
- UMAPM
- UMCommon
- UMDevice
- WechatOpenSDK-XCFramework
SPEC CHECKSUMS:
AMap3DMap-NO-IDFA: 393a24abb0451fed2daa4316c8d3d356a395f2be
AMapFoundation-NO-IDFA: f48acbf6e74913dc6744581053f7d984f2432850
AMapLocation-NO-IDFA: 0fa6e7d5e42e10253f4437424d98966f53760862
AMapSearch-NO-IDFA: 8e9d104032990a3b0cab66afb535299887c61047
UMAPM: ba9fbebe8dd2048b251c332ab0afc86e1ba5ea63
UMCommon: d652b3b372a801b36db203f5b546ab3e15676898
UMDevice: 20b7b3c37a36b2c5c7ca8b5a54386ff9ed2b3b19
WechatOpenSDK-XCFramework: ff342ae616bb86df3d236aca38059dfd4bc4a949
PODFILE CHECKSUM: baa972253fcebc312545f7592c48cbba632f1907
PODFILE CHECKSUM: b8208561994066ba4f55ba647586c4549ac4a44a
COCOAPODS: 1.16.2

20
Pods/Manifest.lock generated
View File

@ -6,11 +6,21 @@ PODS:
- AMapFoundation-NO-IDFA (>= 1.8.7)
- AMapSearch-NO-IDFA (9.7.5):
- AMapFoundation-NO-IDFA (>= 1.8.0)
- UMAPM (2.0.7):
- UMCommon
- UMCommon (7.5.11):
- UMDevice
- UMDevice (3.6.0)
- WechatOpenSDK-XCFramework (2.0.5)
DEPENDENCIES:
- AMap3DMap-NO-IDFA (~> 11.1)
- AMapLocation-NO-IDFA (~> 2.11)
- AMapSearch-NO-IDFA (~> 9.7)
- UMAPM
- UMCommon
- UMDevice
- WechatOpenSDK-XCFramework (~> 2.0.4)
SPEC REPOS:
trunk:
@ -18,13 +28,21 @@ SPEC REPOS:
- AMapFoundation-NO-IDFA
- AMapLocation-NO-IDFA
- AMapSearch-NO-IDFA
- UMAPM
- UMCommon
- UMDevice
- WechatOpenSDK-XCFramework
SPEC CHECKSUMS:
AMap3DMap-NO-IDFA: 393a24abb0451fed2daa4316c8d3d356a395f2be
AMapFoundation-NO-IDFA: f48acbf6e74913dc6744581053f7d984f2432850
AMapLocation-NO-IDFA: 0fa6e7d5e42e10253f4437424d98966f53760862
AMapSearch-NO-IDFA: 8e9d104032990a3b0cab66afb535299887c61047
UMAPM: ba9fbebe8dd2048b251c332ab0afc86e1ba5ea63
UMCommon: d652b3b372a801b36db203f5b546ab3e15676898
UMDevice: 20b7b3c37a36b2c5c7ca8b5a54386ff9ed2b3b19
WechatOpenSDK-XCFramework: ff342ae616bb86df3d236aca38059dfd4bc4a949
PODFILE CHECKSUM: baa972253fcebc312545f7592c48cbba632f1907
PODFILE CHECKSUM: b8208561994066ba4f55ba647586c4549ac4a44a
COCOAPODS: 1.16.2

File diff suppressed because it is too large Load Diff

View File

@ -20,4 +20,24 @@ Copyright © 2014 AutoNavi. All Rights Reserved.
Copyright © 2014 AutoNavi. All Rights Reserved.
## UMAPM
Copyright 2011 - 2020 umeng.com. All rights reserved.
## UMCommon
Copyright 2011 - 2021 umeng.com. All rights reserved.
## UMDevice
Copyright 2011 - 2021 umeng.com. All rights reserved.
## WechatOpenSDK-XCFramework
Copyright 2020 tencent.com. All rights reserved.
Generated by CocoaPods - https://cocoapods.org

View File

@ -56,6 +56,50 @@
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2011 - 2020 umeng.com. All rights reserved.
</string>
<key>License</key>
<string>Copyright</string>
<key>Title</key>
<string>UMAPM</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2011 - 2021 umeng.com. All rights reserved.
</string>
<key>License</key>
<string>Copyright</string>
<key>Title</key>
<string>UMCommon</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2011 - 2021 umeng.com. All rights reserved.
</string>
<key>License</key>
<string>Copyright</string>
<key>Title</key>
<string>UMDevice</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2020 tencent.com. All rights reserved.
</string>
<key>License</key>
<string>Copyright</string>
<key>Title</key>
<string>WechatOpenSDK-XCFramework</string>
<key>Type</key>
<string>PSGroupSpecifier</string>
</dict>
<dict>
<key>FooterText</key>
<string>Generated by CocoaPods - https://cocoapods.org</string>

View File

@ -1,16 +1,16 @@
ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/UMAPM/UMAPM_2.0.7" "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapSearchKit" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "MAMapKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA"
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "UMAPM" -framework "UMCommon" -framework "UMDevice" -framework "WebKit" -framework "WechatOpenSDK"
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/UMAPM" "-F${PODS_CONFIGURATION_BUILD_DIR}/UMCommon" "-F${PODS_CONFIGURATION_BUILD_DIR}/UMDevice" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = arm64 x86_64
OTHER_LDFLAGS[sdk=iphonesimulator*] = -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited)
OTHER_LDFLAGS[sdk=iphoneos*] = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapSearchKit" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "MAMapKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "UMAPM" -framework "UMCommon" -framework "UMDevice" -framework "WebKit" -framework "WechatOpenSDK"

View File

@ -1,16 +1,16 @@
ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/UMAPM/UMAPM_2.0.7" "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapSearchKit" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "MAMapKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA"
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "UMAPM" -framework "UMCommon" -framework "UMDevice" -framework "WebKit" -framework "WechatOpenSDK"
OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch-NO-IDFA" "-F${PODS_CONFIGURATION_BUILD_DIR}/UMAPM" "-F${PODS_CONFIGURATION_BUILD_DIR}/UMCommon" "-F${PODS_CONFIGURATION_BUILD_DIR}/UMDevice" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = arm64 x86_64
OTHER_LDFLAGS[sdk=iphonesimulator*] = -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited)
OTHER_LDFLAGS[sdk=iphoneos*] = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapSearchKit" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "MAMapKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "UMAPM" -framework "UMCommon" -framework "UMDevice" -framework "WebKit" -framework "WechatOpenSDK"

View File

@ -1,14 +1,14 @@
ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/UMAPM/UMAPM_2.0.7" "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = arm64 x86_64
OTHER_LDFLAGS[sdk=iphonesimulator*] = -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited)
OTHER_LDFLAGS[sdk=iphoneos*] = $(inherited) -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"

View File

@ -1,14 +1,14 @@
ARCHS = $(ARCHS_STANDARD)
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA"
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMap3DMap-NO-IDFA" "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/UMAPM/UMAPM_2.0.7" "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
PODS_ROOT = ${SRCROOT}/Pods
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = arm64 x86_64
OTHER_LDFLAGS[sdk=iphonesimulator*] = -ObjC -l"c++" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*] = $(inherited)
OTHER_LDFLAGS[sdk=iphoneos*] = $(inherited) -l"c++" -l"sqlite3" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreTelephony" -framework "CoreText" -framework "ExternalAccessory" -framework "GLKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit"

View File

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/UMAPM/UMAPM-xcframeworks.sh
${PODS_ROOT}/UMAPM/UMAPM_2.0.7/UMAPM.xcframework

View File

@ -0,0 +1 @@
${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM/UMAPM.framework

View File

@ -0,0 +1,121 @@
#!/bin/sh
set -e
set -u
set -o pipefail
function on_error {
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
}
trap 'on_error $LINENO' ERR
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
variant_for_slice()
{
case "$1" in
"UMAPM.xcframework/ios-arm64")
echo ""
;;
"UMAPM.xcframework/ios-arm64_x86_64-simulator")
echo "simulator"
;;
esac
}
archs_for_slice()
{
case "$1" in
"UMAPM.xcframework/ios-arm64")
echo "arm64"
;;
"UMAPM.xcframework/ios-arm64_x86_64-simulator")
echo "arm64 x86_64"
;;
esac
}
copy_dir()
{
local source="$1"
local destination="$2"
# Use filter instead of exclude so missing patterns don't throw errors.
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}"
}
SELECT_SLICE_RETVAL=""
select_slice() {
local xcframework_name="$1"
xcframework_name="${xcframework_name##*/}"
local paths=("${@:2}")
# Locate the correct slice of the .xcframework for the current architectures
local target_path=""
# Split archs on space so we can find a slice that has all the needed archs
local target_archs=$(echo $ARCHS | tr " " "\n")
local target_variant=""
if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
target_variant="simulator"
fi
if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
target_variant="maccatalyst"
fi
for i in ${!paths[@]}; do
local matched_all_archs="1"
local slice_archs="$(archs_for_slice "${xcframework_name}/${paths[$i]}")"
local slice_variant="$(variant_for_slice "${xcframework_name}/${paths[$i]}")"
for target_arch in $target_archs; do
if ! [[ "${slice_variant}" == "$target_variant" ]]; then
matched_all_archs="0"
break
fi
if ! echo "${slice_archs}" | tr " " "\n" | grep -F -q -x "$target_arch"; then
matched_all_archs="0"
break
fi
done
if [[ "$matched_all_archs" == "1" ]]; then
# Found a matching slice
echo "Selected xcframework slice ${paths[$i]}"
SELECT_SLICE_RETVAL=${paths[$i]}
break
fi
done
}
install_xcframework() {
local basepath="$1"
local name="$2"
local package_type="$3"
local paths=("${@:4}")
# Locate the correct slice of the .xcframework for the current architectures
select_slice "${basepath}" "${paths[@]}"
local target_path="$SELECT_SLICE_RETVAL"
if [[ -z "$target_path" ]]; then
echo "warning: [CP] $(basename ${basepath}): Unable to find matching slice in '${paths[@]}' for the current build architectures ($ARCHS) and platform (${EFFECTIVE_PLATFORM_NAME-${PLATFORM_NAME}})."
return
fi
local source="$basepath/$target_path"
local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}"
if [ ! -d "$destination" ]; then
mkdir -p "$destination"
fi
copy_dir "$source/" "$destination"
echo "Copied $source to $destination"
}
install_xcframework "${PODS_ROOT}/UMAPM/UMAPM_2.0.7/UMAPM.xcframework" "UMAPM" "framework" "ios-arm64" "ios-arm64_x86_64-simulator"

View File

@ -0,0 +1,14 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UMAPM
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/UMAPM/UMAPM_2.0.7" "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"c++" -framework "CoreTelephony" -framework "SystemConfiguration"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/UMAPM
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

View File

@ -0,0 +1,14 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UMAPM
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/UMAPM/UMAPM_2.0.7" "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMAPM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"c++" -framework "CoreTelephony" -framework "SystemConfiguration"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/UMAPM
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES

View File

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/UMCommon/UMCommon-xcframeworks.sh
${PODS_ROOT}/UMCommon/UMCommon_7.5.11/UMCommon.xcframework

View File

@ -0,0 +1 @@
${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon/UMCommon.framework

View File

@ -0,0 +1,121 @@
#!/bin/sh
set -e
set -u
set -o pipefail
function on_error {
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
}
trap 'on_error $LINENO' ERR
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
variant_for_slice()
{
case "$1" in
"UMCommon.xcframework/ios-arm64")
echo ""
;;
"UMCommon.xcframework/ios-arm64_x86_64-simulator")
echo "simulator"
;;
esac
}
archs_for_slice()
{
case "$1" in
"UMCommon.xcframework/ios-arm64")
echo "arm64"
;;
"UMCommon.xcframework/ios-arm64_x86_64-simulator")
echo "arm64 x86_64"
;;
esac
}
copy_dir()
{
local source="$1"
local destination="$2"
# Use filter instead of exclude so missing patterns don't throw errors.
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}"
}
SELECT_SLICE_RETVAL=""
select_slice() {
local xcframework_name="$1"
xcframework_name="${xcframework_name##*/}"
local paths=("${@:2}")
# Locate the correct slice of the .xcframework for the current architectures
local target_path=""
# Split archs on space so we can find a slice that has all the needed archs
local target_archs=$(echo $ARCHS | tr " " "\n")
local target_variant=""
if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
target_variant="simulator"
fi
if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
target_variant="maccatalyst"
fi
for i in ${!paths[@]}; do
local matched_all_archs="1"
local slice_archs="$(archs_for_slice "${xcframework_name}/${paths[$i]}")"
local slice_variant="$(variant_for_slice "${xcframework_name}/${paths[$i]}")"
for target_arch in $target_archs; do
if ! [[ "${slice_variant}" == "$target_variant" ]]; then
matched_all_archs="0"
break
fi
if ! echo "${slice_archs}" | tr " " "\n" | grep -F -q -x "$target_arch"; then
matched_all_archs="0"
break
fi
done
if [[ "$matched_all_archs" == "1" ]]; then
# Found a matching slice
echo "Selected xcframework slice ${paths[$i]}"
SELECT_SLICE_RETVAL=${paths[$i]}
break
fi
done
}
install_xcframework() {
local basepath="$1"
local name="$2"
local package_type="$3"
local paths=("${@:4}")
# Locate the correct slice of the .xcframework for the current architectures
select_slice "${basepath}" "${paths[@]}"
local target_path="$SELECT_SLICE_RETVAL"
if [[ -z "$target_path" ]]; then
echo "warning: [CP] $(basename ${basepath}): Unable to find matching slice in '${paths[@]}' for the current build architectures ($ARCHS) and platform (${EFFECTIVE_PLATFORM_NAME-${PLATFORM_NAME}})."
return
fi
local source="$basepath/$target_path"
local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}"
if [ ! -d "$destination" ]; then
mkdir -p "$destination"
fi
copy_dir "$source/" "$destination"
echo "Copied $source to $destination"
}
install_xcframework "${PODS_ROOT}/UMCommon/UMCommon_7.5.11/UMCommon.xcframework" "UMCommon" "framework" "ios-arm64" "ios-arm64_x86_64-simulator"

View File

@ -0,0 +1,15 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UMCommon
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "CoreTelephony" -framework "SystemConfiguration"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/UMCommon
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = x86_64 armv7 arm64

View File

@ -0,0 +1,15 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UMCommon
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/UMCommon/UMCommon_7.5.11" "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMCommon" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"sqlite3" -l"z" -framework "CoreTelephony" -framework "SystemConfiguration"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/UMCommon
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = x86_64 armv7 arm64

View File

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/UMDevice/UMDevice-xcframeworks.sh
${PODS_ROOT}/UMDevice/UMDevice_3.6.0/UMDevice.xcframework

View File

@ -0,0 +1 @@
${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice/UMDevice.framework

View File

@ -0,0 +1,121 @@
#!/bin/sh
set -e
set -u
set -o pipefail
function on_error {
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
}
trap 'on_error $LINENO' ERR
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
variant_for_slice()
{
case "$1" in
"UMDevice.xcframework/ios-arm64")
echo ""
;;
"UMDevice.xcframework/ios-arm64_x86_64-simulator")
echo "simulator"
;;
esac
}
archs_for_slice()
{
case "$1" in
"UMDevice.xcframework/ios-arm64")
echo "arm64"
;;
"UMDevice.xcframework/ios-arm64_x86_64-simulator")
echo "arm64 x86_64"
;;
esac
}
copy_dir()
{
local source="$1"
local destination="$2"
# Use filter instead of exclude so missing patterns don't throw errors.
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}"
}
SELECT_SLICE_RETVAL=""
select_slice() {
local xcframework_name="$1"
xcframework_name="${xcframework_name##*/}"
local paths=("${@:2}")
# Locate the correct slice of the .xcframework for the current architectures
local target_path=""
# Split archs on space so we can find a slice that has all the needed archs
local target_archs=$(echo $ARCHS | tr " " "\n")
local target_variant=""
if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
target_variant="simulator"
fi
if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
target_variant="maccatalyst"
fi
for i in ${!paths[@]}; do
local matched_all_archs="1"
local slice_archs="$(archs_for_slice "${xcframework_name}/${paths[$i]}")"
local slice_variant="$(variant_for_slice "${xcframework_name}/${paths[$i]}")"
for target_arch in $target_archs; do
if ! [[ "${slice_variant}" == "$target_variant" ]]; then
matched_all_archs="0"
break
fi
if ! echo "${slice_archs}" | tr " " "\n" | grep -F -q -x "$target_arch"; then
matched_all_archs="0"
break
fi
done
if [[ "$matched_all_archs" == "1" ]]; then
# Found a matching slice
echo "Selected xcframework slice ${paths[$i]}"
SELECT_SLICE_RETVAL=${paths[$i]}
break
fi
done
}
install_xcframework() {
local basepath="$1"
local name="$2"
local package_type="$3"
local paths=("${@:4}")
# Locate the correct slice of the .xcframework for the current architectures
select_slice "${basepath}" "${paths[@]}"
local target_path="$SELECT_SLICE_RETVAL"
if [[ -z "$target_path" ]]; then
echo "warning: [CP] $(basename ${basepath}): Unable to find matching slice in '${paths[@]}' for the current build architectures ($ARCHS) and platform (${EFFECTIVE_PLATFORM_NAME-${PLATFORM_NAME}})."
return
fi
local source="$basepath/$target_path"
local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}"
if [ ! -d "$destination" ]; then
mkdir -p "$destination"
fi
copy_dir "$source/" "$destination"
echo "Copied $source to $destination"
}
install_xcframework "${PODS_ROOT}/UMDevice/UMDevice_3.6.0/UMDevice.xcframework" "UMDevice" "framework" "ios-arm64" "ios-arm64_x86_64-simulator"

View File

@ -0,0 +1,14 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UMDevice
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/UMDevice
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = x86_64 armv7 arm64

View File

@ -0,0 +1,14 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/UMDevice
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/UMDevice/UMDevice_3.6.0" "${PODS_XCFRAMEWORKS_BUILD_DIR}/UMDevice"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/UMDevice
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = x86_64 armv7 arm64

View File

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/WechatOpenSDK-XCFramework/WechatOpenSDK-XCFramework-xcframeworks.sh
${PODS_ROOT}/WechatOpenSDK-XCFramework/WechatOpenSDK.xcframework

View File

@ -0,0 +1 @@
${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework/WechatOpenSDK.framework

View File

@ -0,0 +1,121 @@
#!/bin/sh
set -e
set -u
set -o pipefail
function on_error {
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
}
trap 'on_error $LINENO' ERR
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
variant_for_slice()
{
case "$1" in
"WechatOpenSDK.xcframework/ios-arm64")
echo ""
;;
"WechatOpenSDK.xcframework/ios-arm64_x86_64-simulator")
echo "simulator"
;;
esac
}
archs_for_slice()
{
case "$1" in
"WechatOpenSDK.xcframework/ios-arm64")
echo "arm64"
;;
"WechatOpenSDK.xcframework/ios-arm64_x86_64-simulator")
echo "arm64 x86_64"
;;
esac
}
copy_dir()
{
local source="$1"
local destination="$2"
# Use filter instead of exclude so missing patterns don't throw errors.
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}"
}
SELECT_SLICE_RETVAL=""
select_slice() {
local xcframework_name="$1"
xcframework_name="${xcframework_name##*/}"
local paths=("${@:2}")
# Locate the correct slice of the .xcframework for the current architectures
local target_path=""
# Split archs on space so we can find a slice that has all the needed archs
local target_archs=$(echo $ARCHS | tr " " "\n")
local target_variant=""
if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
target_variant="simulator"
fi
if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
target_variant="maccatalyst"
fi
for i in ${!paths[@]}; do
local matched_all_archs="1"
local slice_archs="$(archs_for_slice "${xcframework_name}/${paths[$i]}")"
local slice_variant="$(variant_for_slice "${xcframework_name}/${paths[$i]}")"
for target_arch in $target_archs; do
if ! [[ "${slice_variant}" == "$target_variant" ]]; then
matched_all_archs="0"
break
fi
if ! echo "${slice_archs}" | tr " " "\n" | grep -F -q -x "$target_arch"; then
matched_all_archs="0"
break
fi
done
if [[ "$matched_all_archs" == "1" ]]; then
# Found a matching slice
echo "Selected xcframework slice ${paths[$i]}"
SELECT_SLICE_RETVAL=${paths[$i]}
break
fi
done
}
install_xcframework() {
local basepath="$1"
local name="$2"
local package_type="$3"
local paths=("${@:4}")
# Locate the correct slice of the .xcframework for the current architectures
select_slice "${basepath}" "${paths[@]}"
local target_path="$SELECT_SLICE_RETVAL"
if [[ -z "$target_path" ]]; then
echo "warning: [CP] $(basename ${basepath}): Unable to find matching slice in '${paths[@]}' for the current build architectures ($ARCHS) and platform (${EFFECTIVE_PLATFORM_NAME-${PLATFORM_NAME}})."
return
fi
local source="$basepath/$target_path"
local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}"
if [ ! -d "$destination" ]; then
mkdir -p "$destination"
fi
copy_dir "$source/" "$destination"
echo "Copied $source to $destination"
}
install_xcframework "${PODS_ROOT}/WechatOpenSDK-XCFramework/WechatOpenSDK.xcframework" "WechatOpenSDK-XCFramework" "framework" "ios-arm64" "ios-arm64_x86_64-simulator"

View File

@ -0,0 +1,15 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "Security" -framework "UIKit" -framework "WebKit"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/WechatOpenSDK-XCFramework
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = arm64 x86_64

View File

@ -0,0 +1,15 @@
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
OTHER_LDFLAGS = $(inherited) -l"c++" -l"sqlite3.0" -l"z" -framework "CoreGraphics" -framework "Security" -framework "UIKit" -framework "WebKit"
PODS_BUILD_DIR = ${BUILD_DIR}
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
PODS_ROOT = ${SRCROOT}
PODS_TARGET_SRCROOT = ${PODS_ROOT}/WechatOpenSDK-XCFramework
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
SKIP_INSTALL = YES
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
VALID_ARCHS = arm64 x86_64

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>UMAPM.framework/UMAPM</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>UMAPM.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>UMAPM.framework/UMAPM</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>UMAPM.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

Binary file not shown.

View File

@ -0,0 +1,548 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>ios-arm64/UMAPM.framework/Headers/UAPMLog.h</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>ios-arm64/UMAPM.framework/Headers/UMAPMConfig.h</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>ios-arm64/UMAPM.framework/Headers/UMAPMCustomData.h</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>ios-arm64/UMAPM.framework/Headers/UMAPMCustomLog.h</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>ios-arm64/UMAPM.framework/Headers/UMCrashConfigure.h</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>ios-arm64/UMAPM.framework/Headers/UMLaunch.h</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>ios-arm64/UMAPM.framework/Headers/UMPage.h</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>ios-arm64/UMAPM.framework/Info.plist</key>
<data>
/uxcz9IIT5iV5iif1cHecFjIeT4=
</data>
<key>ios-arm64/UMAPM.framework/PrivacyInfo.xcprivacy</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
<key>ios-arm64/UMAPM.framework/UMAPM</key>
<data>
ESG5E9JbR147LytWe6AjbE6W824=
</data>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeDirectory</key>
<data>
eaO4KTPyp89lfMFXq8qMbE682io=
</data>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeRequirements</key>
<data>
JuNmgPswdtEyu7+QArT1A5d+MPA=
</data>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeRequirements-1</key>
<data>
urAypb7vGZjeAwfy2GgbRiQ6lHY=
</data>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeResources</key>
<data>
zgHfCYS9Rb+oc+cLNDVDz0j/rqQ=
</data>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeSignature</key>
<data>
Wna+elk1MHzQhbI1bK3amvjEhsY=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UAPMLog.h</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMAPMConfig.h</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMAPMCustomData.h</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMAPMCustomLog.h</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMCrashConfigure.h</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMLaunch.h</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMPage.h</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Info.plist</key>
<data>
G4Wp1i8Uvp5koz1XDrvQEtwTgW4=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/PrivacyInfo.xcprivacy</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/UMAPM</key>
<data>
94QfxlcaRn46COPnsinJ7a6ouqM=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeDirectory</key>
<data>
R8V95INDIJPLBmuxbHtqP+crLtE=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeRequirements</key>
<data>
OnX22wWFKRSOFN1+obRynMCeyXM=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeRequirements-1</key>
<data>
gvz47ZSMF3UtvlxSxyWcH77fZBw=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeResources</key>
<data>
FPr+i3ZJYTRZDOTLMbCl9QI10Pc=
</data>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeSignature</key>
<data>
2jmj7l5rSw0yVb/vlWAYkK/YBwk=
</data>
</dict>
<key>files2</key>
<dict>
<key>ios-arm64/UMAPM.framework/Headers/UAPMLog.h</key>
<dict>
<key>hash</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>hash2</key>
<data>
se6jej/6AiNbawn8j2zY8xeOwPLt10WGP5HPl8k5KMM=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/Headers/UMAPMConfig.h</key>
<dict>
<key>hash</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>hash2</key>
<data>
DRvvGO8dMQ4cdxXaT/jGW0byyr8G5pVb2iqNY+jCWpA=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/Headers/UMAPMCustomData.h</key>
<dict>
<key>hash</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>hash2</key>
<data>
44++KY+/UmdG1BbWQQIWNyo9hAymOPllP02E7PmkvOo=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/Headers/UMAPMCustomLog.h</key>
<dict>
<key>hash</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>hash2</key>
<data>
wk8jfwqKbTZz8MQ4ihO+0zta2o0211qdXPsK9/TjtuU=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/Headers/UMCrashConfigure.h</key>
<dict>
<key>hash</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>hash2</key>
<data>
pgUbY1EZa2rozFOKEURboXYOycdcgNMbuCiz1qEgKbw=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/Headers/UMLaunch.h</key>
<dict>
<key>hash</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>hash2</key>
<data>
tDeaqfSmsuTlX2h3g7Tmr7s5wCZumg9TJG5pKpMSHTM=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/Headers/UMPage.h</key>
<dict>
<key>hash</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>hash2</key>
<data>
BrhM9tqdBA/3L91G3fB6Zd4TDnuuv5NS4XbL8r7G1yQ=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/Info.plist</key>
<dict>
<key>hash</key>
<data>
/uxcz9IIT5iV5iif1cHecFjIeT4=
</data>
<key>hash2</key>
<data>
Z/z1XDnj7NS+EYNWQwRe2x5sYiw+hoUfgV6ATj1g3VI=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
<key>hash2</key>
<data>
AN+41cR8Kh4TFlkxEXlc+KPioYQWdsVnoaCLixQmBS4=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/UMAPM</key>
<dict>
<key>hash</key>
<data>
ESG5E9JbR147LytWe6AjbE6W824=
</data>
<key>hash2</key>
<data>
LI5mswUMCaX9SbNi5Vsm/tXbMMl1thjW2MHzkWEoYRc=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeDirectory</key>
<dict>
<key>hash</key>
<data>
eaO4KTPyp89lfMFXq8qMbE682io=
</data>
<key>hash2</key>
<data>
fQLeoT0MhOk7vjUd7kjQRpd0Eu4JHIVrNA7vd3LskrI=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeRequirements</key>
<dict>
<key>hash</key>
<data>
JuNmgPswdtEyu7+QArT1A5d+MPA=
</data>
<key>hash2</key>
<data>
pC9PuND5Sexl2uttl6cAe+QBsASVXWTkIRSueQEcS/E=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeRequirements-1</key>
<dict>
<key>hash</key>
<data>
urAypb7vGZjeAwfy2GgbRiQ6lHY=
</data>
<key>hash2</key>
<data>
nY0zRCseAii7mncXiFUdkg3tFLP3W2+m3TEcqWSsHK0=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeResources</key>
<dict>
<key>hash</key>
<data>
zgHfCYS9Rb+oc+cLNDVDz0j/rqQ=
</data>
<key>hash2</key>
<data>
3GHuJCIlm5+pp/raCzWV24LgkyCWoSZvolpqWP8m/LM=
</data>
</dict>
<key>ios-arm64/UMAPM.framework/_CodeSignature/CodeSignature</key>
<dict>
<key>hash</key>
<data>
Wna+elk1MHzQhbI1bK3amvjEhsY=
</data>
<key>hash2</key>
<data>
C/GzF4sskdotFFPQzRlWYRFLyptJQcKCh+M0HIa2lRI=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UAPMLog.h</key>
<dict>
<key>hash</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>hash2</key>
<data>
se6jej/6AiNbawn8j2zY8xeOwPLt10WGP5HPl8k5KMM=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMAPMConfig.h</key>
<dict>
<key>hash</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>hash2</key>
<data>
DRvvGO8dMQ4cdxXaT/jGW0byyr8G5pVb2iqNY+jCWpA=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMAPMCustomData.h</key>
<dict>
<key>hash</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>hash2</key>
<data>
44++KY+/UmdG1BbWQQIWNyo9hAymOPllP02E7PmkvOo=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMAPMCustomLog.h</key>
<dict>
<key>hash</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>hash2</key>
<data>
wk8jfwqKbTZz8MQ4ihO+0zta2o0211qdXPsK9/TjtuU=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMCrashConfigure.h</key>
<dict>
<key>hash</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>hash2</key>
<data>
pgUbY1EZa2rozFOKEURboXYOycdcgNMbuCiz1qEgKbw=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMLaunch.h</key>
<dict>
<key>hash</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>hash2</key>
<data>
tDeaqfSmsuTlX2h3g7Tmr7s5wCZumg9TJG5pKpMSHTM=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Headers/UMPage.h</key>
<dict>
<key>hash</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>hash2</key>
<data>
BrhM9tqdBA/3L91G3fB6Zd4TDnuuv5NS4XbL8r7G1yQ=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/Info.plist</key>
<dict>
<key>hash</key>
<data>
G4Wp1i8Uvp5koz1XDrvQEtwTgW4=
</data>
<key>hash2</key>
<data>
rLjmMpCL3wAk5aELONK7mMdKvDDomfZ0J4Ynmstk3ys=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
<key>hash2</key>
<data>
AN+41cR8Kh4TFlkxEXlc+KPioYQWdsVnoaCLixQmBS4=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/UMAPM</key>
<dict>
<key>hash</key>
<data>
94QfxlcaRn46COPnsinJ7a6ouqM=
</data>
<key>hash2</key>
<data>
cL0TsmtXyuqQDHzXPyjqkaojhXj7GLwS96yMjFvDwC0=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeDirectory</key>
<dict>
<key>hash</key>
<data>
R8V95INDIJPLBmuxbHtqP+crLtE=
</data>
<key>hash2</key>
<data>
gdy1P+FoLiF8yYcub/lkP37uO/kNebm8mgUQYJeIx/c=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeRequirements</key>
<dict>
<key>hash</key>
<data>
OnX22wWFKRSOFN1+obRynMCeyXM=
</data>
<key>hash2</key>
<data>
mHkgkE6rZQ51eIwFSqCwUk5qgL/HGqMt+NI3phdD+YY=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeRequirements-1</key>
<dict>
<key>hash</key>
<data>
gvz47ZSMF3UtvlxSxyWcH77fZBw=
</data>
<key>hash2</key>
<data>
XASeO8seEqrKlR3yv1l5KNCVuCmJtEaLLGH4Ug6iM0w=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeResources</key>
<dict>
<key>hash</key>
<data>
FPr+i3ZJYTRZDOTLMbCl9QI10Pc=
</data>
<key>hash2</key>
<data>
n1H/Dp9CCAilOtR0O2/l7sYtWDi0ofdyr8VwxSWwYwQ=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMAPM.framework/_CodeSignature/CodeSignature</key>
<dict>
<key>hash</key>
<data>
2jmj7l5rSw0yVb/vlWAYkK/YBwk=
</data>
<key>hash2</key>
<data>
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

Binary file not shown.

View File

@ -0,0 +1,27 @@
//
// UAPMLog.h
// WPKCore
//
// Created by baxiong on 2024/7/2.
// Copyright © 2024 uc. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UAPMLog : NSObject
+ (void)verbose:(NSString *)tag msg:(NSString *)msg;
+ (void)debug:(NSString *)tag msg:(NSString *)msg;
+ (void)info:(NSString *)tag msg:(NSString *)msg;
+ (void)warn:(NSString *)tag msg:(NSString *)msg;
+ (void)error:(NSString *)tag msg:(NSString *)msg;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,105 @@
//
// UMAPMConfig.h
// UMAPM
//
// Created by zhangjunhua on 2021/6/21.
// Copyright © 2021 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UMAPMConfig : NSObject<NSCopying>
+(UMAPMConfig*)defaultConfig;
/**
* crash&卡顿监控开关,默认开启
*/
@property (nonatomic,assign) BOOL crashAndBlockMonitorEnable;
/**
* 启动模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL launchMonitorEnable;
/**
* 内存模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL memMonitorEnable;
/**
* OOM模块监控开关默认开启
*/
@property (nonatomic,assign) BOOL oomMonitorEnable;
/**
* 网络模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL networkEnable;
/**
* H5打通模块开关默认开启
*/
@property (nonatomic,assign) BOOL javaScriptBridgeEnable;
/**
* 页面分析打通模块开关,默认开启
*/
@property (nonatomic,assign) BOOL pageMonitorEnable;
/**
* 日志回捞模块开关,默认开启
*/
@property (nonatomic,assign) BOOL logCollectEnable;
/**
* 日志回捞模块userId
*/
@property (nonatomic,copy) NSString *logCollectUserId;
/**
*启用cxa_throw 方案规避第三方SDK也实现了__cxa_throw()导致CPP堆栈为空的问题默认关闭
*/
@property (nonatomic,assign) BOOL swapOfCxaThrow;
/**
*集成测试。
*/
+ (BOOL)handleUrl:(NSURL *)url;
/*
* 卡顿监控参数
* 发送检测心跳的时间间隔。单位:秒。
* 区间范围[1,4],超过就用默认值2
*/
@property (nonatomic, assign) float sendBeatInterval;
/*
* 卡顿监控参数
* 检测卡顿的时间间隔 单位是秒。 发送心跳后checkBeatInterval秒进行检测
* 区间范围[1,4],超过就用默认值2
*/
@property (nonatomic, assign) float checkBeatInterval;
/*
* 卡顿监控参数
* 连续多少次没心跳 认为触发卡顿
* 区间范围[1,4],超过就用默认值3注意此参数必须为整数
*/
@property (nonatomic, assign) NSInteger toleranceBeatMissingCount;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,52 @@
//
// UMAPMCustomData.h
// UMCrash
//
// Created by yanke on 2024/10/10.
// Copyright © 2024 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NSString * UMAPMCustomStringDataKey NS_STRING_ENUM;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey1;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey2;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey3;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey4;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey5;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey6;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey7;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey8;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey9;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey10;
// 字符串不能超过100个字符
FOUNDATION_EXPORT int const UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH;
@interface UMAPMCustomData : NSObject
- (NSDictionary *)customDataDictInfo;
/**
* 获取设置的自定义维度数据
* @param key 如果KEY不在预设的中返回nil
* @return 如果有设置则返回当前值如果没有设置返回nil
*/
- (nullable NSString *)getStringParam:(UMAPMCustomStringDataKey)key;
/**
* 设置自定义维度数据
* @param key 如果KEY不在预设的中则设置失败
* @param param 长度不能超过 UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH
* value = null, 则会设置空串
* value = 长度超标字符串则会截取前UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH个字符设置
*/
- (BOOL)putStringParam:(nullable NSString *)param forKey:(UMAPMCustomStringDataKey)key;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,26 @@
//
// UMAPMCustomLog.h
// UMCrash
//
// Created by 彦克 on 2024/6/5.
// Copyright © 2024 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UMAPMCustomLog : NSObject
+ (void)vTag:(NSString *)tag msg:(NSString *)msg;
+ (void)dTag:(NSString *)tag msg:(NSString *)msg;
+ (void)iTag:(NSString *)tag msg:(NSString *)msg;
+ (void)wTag:(NSString *)tag msg:(NSString *)msg;
+ (void)eTag:(NSString *)tag msg:(NSString *)msg;
/// 设置写入日志的缓存大小,日志将根据设置的缓存大小循环写入
/// - Parameter size: 最大缓存条数
+ (void)setMaxCount:(NSInteger)size;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,156 @@
//
// UMCrashConfigure.h
// UMCrash
//
// Created by wangkai on 2020/9/3.
// Copyright © 2020 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef NSString *_Nullable(^CallbackBlock)(void);
FOUNDATION_EXPORT NSString * _Nonnull const UMReportExceptionNameForCSharp;
@class UMAPMConfig,UMAPMCustomData;;
typedef NS_ENUM(NSInteger, UMCrashType)
{
/* 崩溃 */
UMCrashTypeException = 0x01,
/* 卡顿 */
UMCrashTypeBlock = 0x02,
/* 自定义错误 */
UMCrashTypeUserReported = 0x03,
/* 其他 */
UMCrashTypeOther = 0x04,
};
typedef NSString *_Nullable(^CrashCallBackBlock)(UMCrashType type);
typedef NSString * UMAPMPerfTypeName NS_TYPED_EXTENSIBLE_ENUM;
FOUNDATION_EXTERN UMAPMPerfTypeName const _Nonnull UMAPMPerfTypeLaunch;
@interface UMCrashConfigure : NSObject
//获取sdk版本号
+ (NSString *_Nonnull)getVersion;
/**
* 异常回调随异常信息一起上报。return字符串不能大于256字节
*/
+ (void)setCrashCBBlock:(CallbackBlock _Nullable )cbBlock;
/**
* 异常回调随异常信息一起上报。不同于“setCrashCBBlock:”方法回调中提供了异常类型两个方法按需取一个实现即可。return字符串不能大于256字节。
*/
+ (void)setCrashCallBackBlock:(CrashCallBackBlock _Nullable )cbBlock;
/**
* 设置自定义版本号和build版本号即子版本号 (需要在初始化appkey方法之前调用)
*/
+ (void)setAppVersion:( NSString * __nonnull )appVersion buildVersion:(NSString* __nullable)buildVersion;
/**
* 设置APM的各个模块的开启/关闭配置(需要在初始化appkey方法之前调用)
*/
+(void)setAPMConfig:(UMAPMConfig*_Nonnull)config;
/**
* @brief 设置APM的网络模块针对iOS13及以下系统的单独开关以避免在同时集成NSURLProtocol和APM的网络模块的本身冲突引起崩溃。
* 如果需要调用在初始化UAPM网络模块前调用。
*
* @param enable 指定开关。YES(捕获iOS13及以下特定网络请求默认开启)。NO:不捕获iOS13及以下特定网络请求。
*
* @note 问题原因同时集成NSURLProtocol和APM的网络模块的场景先初始化APM的网络模块再初始化NSURLProtocol的registerClass会导致崩溃在iOS13及以下版本会崩溃目前可以确定为iOS系统API引起的问题iOS14无此问题。先初始化NSURLProtocol的registerClass再初始化APM的网络模块是不会出现问题的
* 兼容iOS13及以下的初始化代码如下
* @example:
* //确保NSURLProtocol的初始化在UMAPM的上面
* [NSURLProtocol registerClass:[UMURLProtocol class]];
* UMAPMConfig* config = [UMAPMConfig defaultConfig];
* config.networkEnable = YES;
* [UMCrashConfigure setAPMConfig:config];
* [UMConfigure initWithAppkey:UMAPPKEY channel:@"App Store"];
*
* @note
* 此开关默认打开在同时集成NSURLProtocol和APM的网络模块的场景时候根据需要调用如果按照上述初始化顺序不需要调用。
*
* @note 此函数关闭生效后不会完全关闭网络模块只是针对特定网络请求不再捕获如果开发者能知道同时集成NSURLProtocol和APM的网络模块的场景的时候最好通过调整初始化顺利来兼容所有场景并在iOS13及以下版本测试兼容性。
* @note:其他场景下,不需要调用此函数。
*/
+(void)enableNetworkForProtocol:(BOOL)enable;
/**
* 上报自定义错误
* 用户可以用SDK预定义的字符串UMReportExceptionNameForCSharp来传递csharp类型的自定义异常
* @name 名称 长度限制256字符以内超过截断。
* @reason 错误原因 长度限制256字符以内超过截断。
* @stackTrace 堆栈 长度累计限制5000字符以内超过部分的数组项会丢弃。
*
* @example:
* // 日志类型唯一标识
NSString* name = @"csharp";
NSString* reason = @"csharp exception";
NSArray* stackTrace = [NSArray arrayWithObjects:
@"msg: Exception: Exception, Attempted to divide by zero.",
@"UnityDemo+ExceptionProbe.NormalException () (at <unknown>:0)",
@"UnityDemo.TrigException (System.Int32 selGridInt) (at <unknown>:0)",
@"UnityDemo.OnGUI () (at <unknown>:0)",
nil];
*
*[UMCrashConfigure reportExceptionWithName:name reason:reason stackTrace:stackTrace];
*
*
*/
+(void)reportExceptionWithName:(NSString* _Nonnull)name
reason:(NSString* _Nonnull)reason
stackTrace:(NSArray* _Nonnull)stackTrace;
/**
* 增加自定义信息
* 设置此接口后当发生崩溃、卡顿、自定义错误时会携带相应信息。如用户ID、直播房间号。注一个生命周期最多支持设置10对
* @key NSString 键。
* @value NSString 值。
*
*/
+ (void)addCustomInfoKey:(NSString *_Nonnull)key value:(NSString *_Nonnull)value;
/**
* 添加自定义维度SDK初始化前调用无效
* @param data 需要更新的自定义维度
*/
+ (void)updateCustomData:(UMAPMCustomData *_Nonnull)data;
/**
* 获取当前自定标维度信息,若未设置,返回空
* @return 已设置的自定义维度
*/
+ (nullable UMAPMCustomData *)currentCustomData;
/**
* 性能日志回调 目前仅支持启动UMAPMPerfTypeLaunch
*/
+ (void)setPerfCallBackBlock:(void(^_Nullable)(UMAPMPerfTypeName _Nonnull type))cbBlock;
/**
* 设置网络分析Response用于补齐网络分析中的Response
* */
+ (void)setResponse:(NSString *_Nonnull)responseStr forTaskDesc:(NSString *_Nonnull)taskDesc;
/**
* 网络分析环境状态
* Yes环境可用 NO环境不可用
*
*/
+ (BOOL)networkMonitorStatus;
/**
* 控制写入日志回捞写入频率,使用前请联系开发者,自行修改可能产生未知问题
*
*/
+ (void)setLogCollectSaveSize:(long) size;
+ (void)setLogCollectInitImmediately:(BOOL) initImmediately;
@end

View File

@ -0,0 +1,47 @@
//
// UMLaunch.h
// WPKCore
//
// Created by zhangjunhua on 2021/4/20.
// Copyright © 2021 uc. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
//冷启动的预定义类型
typedef NS_ENUM(NSInteger,UMPredefineLaunchType){
UMPredefineLaunchType_DidFinishLaunchingEnd,//在didFinishLaunchingWithOptions的最后一句设置
UMPredefineLaunchType_ViewDidLoadEnd,//在第一个ViewController的viewDidLoad函数的最后调用
UMPredefineLaunchType_ViewDidAppearEnd//在第一个ViewController的viewDidAppear函数的最后调用
};
@interface UMLaunch : NSObject
+(instancetype)shareInstance;
+(void)setRootVCCls:(Class)cls;//在DidFinishLaunching第一句代码提前设置RootViewController
/*
* 手动设置三个预定义时间结束时间(初始化耗时结束,应用构建耗时结束,页面加载耗时结束)
*/
+(void)setPredefineLaunchType:(UMPredefineLaunchType)predefineLaunchType;
/*
* 用户在冷启动阶段设置自己的自定义阶段
* @note beginLaunch和endLaunch必须要配对调用
* 如果调用时间段,不在页面加载耗时结束前调用,是不会上报的
*/
+ (void)beginLaunch:(NSString *)methodName;
+ (void)endLaunch:(NSString *)methodName;
/*
* 开启关闭启动模块采集
*/
+(void)setLaunchEnable:(BOOL)enable;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,21 @@
//
// UMPage.h
// WPKCore
//
// Created by liuwei on 2022/6/16.
// Copyright © 2022 uc. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UMPage : NSObject
+ (void)trackBegin:(NSString *)methodName viewController:(UIViewController *)vc;
+ (void)trackEnd:(NSString *)methodName viewController:(UIViewController *)vc;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>7D9E.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,222 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/UAPMLog.h</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>Headers/UMAPMConfig.h</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>Headers/UMAPMCustomData.h</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>Headers/UMAPMCustomLog.h</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>Headers/UMCrashConfigure.h</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>Headers/UMLaunch.h</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>Headers/UMPage.h</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>Info.plist</key>
<data>
/uxcz9IIT5iV5iif1cHecFjIeT4=
</data>
<key>PrivacyInfo.xcprivacy</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/UAPMLog.h</key>
<dict>
<key>hash</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>hash2</key>
<data>
se6jej/6AiNbawn8j2zY8xeOwPLt10WGP5HPl8k5KMM=
</data>
</dict>
<key>Headers/UMAPMConfig.h</key>
<dict>
<key>hash</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>hash2</key>
<data>
DRvvGO8dMQ4cdxXaT/jGW0byyr8G5pVb2iqNY+jCWpA=
</data>
</dict>
<key>Headers/UMAPMCustomData.h</key>
<dict>
<key>hash</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>hash2</key>
<data>
44++KY+/UmdG1BbWQQIWNyo9hAymOPllP02E7PmkvOo=
</data>
</dict>
<key>Headers/UMAPMCustomLog.h</key>
<dict>
<key>hash</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>hash2</key>
<data>
wk8jfwqKbTZz8MQ4ihO+0zta2o0211qdXPsK9/TjtuU=
</data>
</dict>
<key>Headers/UMCrashConfigure.h</key>
<dict>
<key>hash</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>hash2</key>
<data>
pgUbY1EZa2rozFOKEURboXYOycdcgNMbuCiz1qEgKbw=
</data>
</dict>
<key>Headers/UMLaunch.h</key>
<dict>
<key>hash</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>hash2</key>
<data>
tDeaqfSmsuTlX2h3g7Tmr7s5wCZumg9TJG5pKpMSHTM=
</data>
</dict>
<key>Headers/UMPage.h</key>
<dict>
<key>hash</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>hash2</key>
<data>
BrhM9tqdBA/3L91G3fB6Zd4TDnuuv5NS4XbL8r7G1yQ=
</data>
</dict>
<key>PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
<key>hash2</key>
<data>
AN+41cR8Kh4TFlkxEXlc+KPioYQWdsVnoaCLixQmBS4=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,27 @@
//
// UAPMLog.h
// WPKCore
//
// Created by baxiong on 2024/7/2.
// Copyright © 2024 uc. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UAPMLog : NSObject
+ (void)verbose:(NSString *)tag msg:(NSString *)msg;
+ (void)debug:(NSString *)tag msg:(NSString *)msg;
+ (void)info:(NSString *)tag msg:(NSString *)msg;
+ (void)warn:(NSString *)tag msg:(NSString *)msg;
+ (void)error:(NSString *)tag msg:(NSString *)msg;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,105 @@
//
// UMAPMConfig.h
// UMAPM
//
// Created by zhangjunhua on 2021/6/21.
// Copyright © 2021 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UMAPMConfig : NSObject<NSCopying>
+(UMAPMConfig*)defaultConfig;
/**
* crash&卡顿监控开关,默认开启
*/
@property (nonatomic,assign) BOOL crashAndBlockMonitorEnable;
/**
* 启动模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL launchMonitorEnable;
/**
* 内存模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL memMonitorEnable;
/**
* OOM模块监控开关默认开启
*/
@property (nonatomic,assign) BOOL oomMonitorEnable;
/**
* 网络模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL networkEnable;
/**
* H5打通模块开关默认开启
*/
@property (nonatomic,assign) BOOL javaScriptBridgeEnable;
/**
* 页面分析打通模块开关,默认开启
*/
@property (nonatomic,assign) BOOL pageMonitorEnable;
/**
* 日志回捞模块开关,默认开启
*/
@property (nonatomic,assign) BOOL logCollectEnable;
/**
* 日志回捞模块userId
*/
@property (nonatomic,copy) NSString *logCollectUserId;
/**
*启用cxa_throw 方案规避第三方SDK也实现了__cxa_throw()导致CPP堆栈为空的问题默认关闭
*/
@property (nonatomic,assign) BOOL swapOfCxaThrow;
/**
*集成测试。
*/
+ (BOOL)handleUrl:(NSURL *)url;
/*
* 卡顿监控参数
* 发送检测心跳的时间间隔。单位:秒。
* 区间范围[1,4],超过就用默认值2
*/
@property (nonatomic, assign) float sendBeatInterval;
/*
* 卡顿监控参数
* 检测卡顿的时间间隔 单位是秒。 发送心跳后checkBeatInterval秒进行检测
* 区间范围[1,4],超过就用默认值2
*/
@property (nonatomic, assign) float checkBeatInterval;
/*
* 卡顿监控参数
* 连续多少次没心跳 认为触发卡顿
* 区间范围[1,4],超过就用默认值3注意此参数必须为整数
*/
@property (nonatomic, assign) NSInteger toleranceBeatMissingCount;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,52 @@
//
// UMAPMCustomData.h
// UMCrash
//
// Created by yanke on 2024/10/10.
// Copyright © 2024 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NSString * UMAPMCustomStringDataKey NS_STRING_ENUM;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey1;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey2;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey3;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey4;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey5;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey6;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey7;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey8;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey9;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey10;
// 字符串不能超过100个字符
FOUNDATION_EXPORT int const UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH;
@interface UMAPMCustomData : NSObject
- (NSDictionary *)customDataDictInfo;
/**
* 获取设置的自定义维度数据
* @param key 如果KEY不在预设的中返回nil
* @return 如果有设置则返回当前值如果没有设置返回nil
*/
- (nullable NSString *)getStringParam:(UMAPMCustomStringDataKey)key;
/**
* 设置自定义维度数据
* @param key 如果KEY不在预设的中则设置失败
* @param param 长度不能超过 UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH
* value = null, 则会设置空串
* value = 长度超标字符串则会截取前UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH个字符设置
*/
- (BOOL)putStringParam:(nullable NSString *)param forKey:(UMAPMCustomStringDataKey)key;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,26 @@
//
// UMAPMCustomLog.h
// UMCrash
//
// Created by 彦克 on 2024/6/5.
// Copyright © 2024 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UMAPMCustomLog : NSObject
+ (void)vTag:(NSString *)tag msg:(NSString *)msg;
+ (void)dTag:(NSString *)tag msg:(NSString *)msg;
+ (void)iTag:(NSString *)tag msg:(NSString *)msg;
+ (void)wTag:(NSString *)tag msg:(NSString *)msg;
+ (void)eTag:(NSString *)tag msg:(NSString *)msg;
/// 设置写入日志的缓存大小,日志将根据设置的缓存大小循环写入
/// - Parameter size: 最大缓存条数
+ (void)setMaxCount:(NSInteger)size;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,156 @@
//
// UMCrashConfigure.h
// UMCrash
//
// Created by wangkai on 2020/9/3.
// Copyright © 2020 wangkai. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef NSString *_Nullable(^CallbackBlock)(void);
FOUNDATION_EXPORT NSString * _Nonnull const UMReportExceptionNameForCSharp;
@class UMAPMConfig,UMAPMCustomData;;
typedef NS_ENUM(NSInteger, UMCrashType)
{
/* 崩溃 */
UMCrashTypeException = 0x01,
/* 卡顿 */
UMCrashTypeBlock = 0x02,
/* 自定义错误 */
UMCrashTypeUserReported = 0x03,
/* 其他 */
UMCrashTypeOther = 0x04,
};
typedef NSString *_Nullable(^CrashCallBackBlock)(UMCrashType type);
typedef NSString * UMAPMPerfTypeName NS_TYPED_EXTENSIBLE_ENUM;
FOUNDATION_EXTERN UMAPMPerfTypeName const _Nonnull UMAPMPerfTypeLaunch;
@interface UMCrashConfigure : NSObject
//获取sdk版本号
+ (NSString *_Nonnull)getVersion;
/**
* 异常回调随异常信息一起上报。return字符串不能大于256字节
*/
+ (void)setCrashCBBlock:(CallbackBlock _Nullable )cbBlock;
/**
* 异常回调随异常信息一起上报。不同于“setCrashCBBlock:”方法回调中提供了异常类型两个方法按需取一个实现即可。return字符串不能大于256字节。
*/
+ (void)setCrashCallBackBlock:(CrashCallBackBlock _Nullable )cbBlock;
/**
* 设置自定义版本号和build版本号即子版本号 (需要在初始化appkey方法之前调用)
*/
+ (void)setAppVersion:( NSString * __nonnull )appVersion buildVersion:(NSString* __nullable)buildVersion;
/**
* 设置APM的各个模块的开启/关闭配置(需要在初始化appkey方法之前调用)
*/
+(void)setAPMConfig:(UMAPMConfig*_Nonnull)config;
/**
* @brief 设置APM的网络模块针对iOS13及以下系统的单独开关以避免在同时集成NSURLProtocol和APM的网络模块的本身冲突引起崩溃。
* 如果需要调用在初始化UAPM网络模块前调用。
*
* @param enable 指定开关。YES(捕获iOS13及以下特定网络请求默认开启)。NO:不捕获iOS13及以下特定网络请求。
*
* @note 问题原因同时集成NSURLProtocol和APM的网络模块的场景先初始化APM的网络模块再初始化NSURLProtocol的registerClass会导致崩溃在iOS13及以下版本会崩溃目前可以确定为iOS系统API引起的问题iOS14无此问题。先初始化NSURLProtocol的registerClass再初始化APM的网络模块是不会出现问题的
* 兼容iOS13及以下的初始化代码如下
* @example:
* //确保NSURLProtocol的初始化在UMAPM的上面
* [NSURLProtocol registerClass:[UMURLProtocol class]];
* UMAPMConfig* config = [UMAPMConfig defaultConfig];
* config.networkEnable = YES;
* [UMCrashConfigure setAPMConfig:config];
* [UMConfigure initWithAppkey:UMAPPKEY channel:@"App Store"];
*
* @note
* 此开关默认打开在同时集成NSURLProtocol和APM的网络模块的场景时候根据需要调用如果按照上述初始化顺序不需要调用。
*
* @note 此函数关闭生效后不会完全关闭网络模块只是针对特定网络请求不再捕获如果开发者能知道同时集成NSURLProtocol和APM的网络模块的场景的时候最好通过调整初始化顺利来兼容所有场景并在iOS13及以下版本测试兼容性。
* @note:其他场景下,不需要调用此函数。
*/
+(void)enableNetworkForProtocol:(BOOL)enable;
/**
* 上报自定义错误
* 用户可以用SDK预定义的字符串UMReportExceptionNameForCSharp来传递csharp类型的自定义异常
* @name 名称 长度限制256字符以内超过截断。
* @reason 错误原因 长度限制256字符以内超过截断。
* @stackTrace 堆栈 长度累计限制5000字符以内超过部分的数组项会丢弃。
*
* @example:
* // 日志类型唯一标识
NSString* name = @"csharp";
NSString* reason = @"csharp exception";
NSArray* stackTrace = [NSArray arrayWithObjects:
@"msg: Exception: Exception, Attempted to divide by zero.",
@"UnityDemo+ExceptionProbe.NormalException () (at <unknown>:0)",
@"UnityDemo.TrigException (System.Int32 selGridInt) (at <unknown>:0)",
@"UnityDemo.OnGUI () (at <unknown>:0)",
nil];
*
*[UMCrashConfigure reportExceptionWithName:name reason:reason stackTrace:stackTrace];
*
*
*/
+(void)reportExceptionWithName:(NSString* _Nonnull)name
reason:(NSString* _Nonnull)reason
stackTrace:(NSArray* _Nonnull)stackTrace;
/**
* 增加自定义信息
* 设置此接口后当发生崩溃、卡顿、自定义错误时会携带相应信息。如用户ID、直播房间号。注一个生命周期最多支持设置10对
* @key NSString 键。
* @value NSString 值。
*
*/
+ (void)addCustomInfoKey:(NSString *_Nonnull)key value:(NSString *_Nonnull)value;
/**
* 添加自定义维度SDK初始化前调用无效
* @param data 需要更新的自定义维度
*/
+ (void)updateCustomData:(UMAPMCustomData *_Nonnull)data;
/**
* 获取当前自定标维度信息,若未设置,返回空
* @return 已设置的自定义维度
*/
+ (nullable UMAPMCustomData *)currentCustomData;
/**
* 性能日志回调 目前仅支持启动UMAPMPerfTypeLaunch
*/
+ (void)setPerfCallBackBlock:(void(^_Nullable)(UMAPMPerfTypeName _Nonnull type))cbBlock;
/**
* 设置网络分析Response用于补齐网络分析中的Response
* */
+ (void)setResponse:(NSString *_Nonnull)responseStr forTaskDesc:(NSString *_Nonnull)taskDesc;
/**
* 网络分析环境状态
* Yes环境可用 NO环境不可用
*
*/
+ (BOOL)networkMonitorStatus;
/**
* 控制写入日志回捞写入频率,使用前请联系开发者,自行修改可能产生未知问题
*
*/
+ (void)setLogCollectSaveSize:(long) size;
+ (void)setLogCollectInitImmediately:(BOOL) initImmediately;
@end

View File

@ -0,0 +1,47 @@
//
// UMLaunch.h
// WPKCore
//
// Created by zhangjunhua on 2021/4/20.
// Copyright © 2021 uc. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
//冷启动的预定义类型
typedef NS_ENUM(NSInteger,UMPredefineLaunchType){
UMPredefineLaunchType_DidFinishLaunchingEnd,//在didFinishLaunchingWithOptions的最后一句设置
UMPredefineLaunchType_ViewDidLoadEnd,//在第一个ViewController的viewDidLoad函数的最后调用
UMPredefineLaunchType_ViewDidAppearEnd//在第一个ViewController的viewDidAppear函数的最后调用
};
@interface UMLaunch : NSObject
+(instancetype)shareInstance;
+(void)setRootVCCls:(Class)cls;//在DidFinishLaunching第一句代码提前设置RootViewController
/*
* 手动设置三个预定义时间结束时间(初始化耗时结束,应用构建耗时结束,页面加载耗时结束)
*/
+(void)setPredefineLaunchType:(UMPredefineLaunchType)predefineLaunchType;
/*
* 用户在冷启动阶段设置自己的自定义阶段
* @note beginLaunch和endLaunch必须要配对调用
* 如果调用时间段,不在页面加载耗时结束前调用,是不会上报的
*/
+ (void)beginLaunch:(NSString *)methodName;
+ (void)endLaunch:(NSString *)methodName;
/*
* 开启关闭启动模块采集
*/
+(void)setLaunchEnable:(BOOL)enable;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,21 @@
//
// UMPage.h
// WPKCore
//
// Created by liuwei on 2022/6/16.
// Copyright © 2022 uc. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UMPage : NSObject
+ (void)trackBegin:(NSString *)methodName viewController:(UIViewController *)vc;
+ (void)trackEnd:(NSString *)methodName viewController:(UIViewController *)vc;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>7D9E.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,222 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/UAPMLog.h</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>Headers/UMAPMConfig.h</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>Headers/UMAPMCustomData.h</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>Headers/UMAPMCustomLog.h</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>Headers/UMCrashConfigure.h</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>Headers/UMLaunch.h</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>Headers/UMPage.h</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>Info.plist</key>
<data>
G4Wp1i8Uvp5koz1XDrvQEtwTgW4=
</data>
<key>PrivacyInfo.xcprivacy</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/UAPMLog.h</key>
<dict>
<key>hash</key>
<data>
Fn6vM2xcK6hAKzlIp/5uiu64Rn8=
</data>
<key>hash2</key>
<data>
se6jej/6AiNbawn8j2zY8xeOwPLt10WGP5HPl8k5KMM=
</data>
</dict>
<key>Headers/UMAPMConfig.h</key>
<dict>
<key>hash</key>
<data>
mTeYNKzjMFj7uRq7O19dZHVBRD8=
</data>
<key>hash2</key>
<data>
DRvvGO8dMQ4cdxXaT/jGW0byyr8G5pVb2iqNY+jCWpA=
</data>
</dict>
<key>Headers/UMAPMCustomData.h</key>
<dict>
<key>hash</key>
<data>
pGDGvAwho/0FYy679Vy3b+BYUVU=
</data>
<key>hash2</key>
<data>
44++KY+/UmdG1BbWQQIWNyo9hAymOPllP02E7PmkvOo=
</data>
</dict>
<key>Headers/UMAPMCustomLog.h</key>
<dict>
<key>hash</key>
<data>
o95XAdUl8mE0xQJmhqp0Nk3eSXk=
</data>
<key>hash2</key>
<data>
wk8jfwqKbTZz8MQ4ihO+0zta2o0211qdXPsK9/TjtuU=
</data>
</dict>
<key>Headers/UMCrashConfigure.h</key>
<dict>
<key>hash</key>
<data>
iIlEYTQCxTsTg94OtWmZlFbBn6g=
</data>
<key>hash2</key>
<data>
pgUbY1EZa2rozFOKEURboXYOycdcgNMbuCiz1qEgKbw=
</data>
</dict>
<key>Headers/UMLaunch.h</key>
<dict>
<key>hash</key>
<data>
OVIv4rBQJxSJvQhEQ36PlO44v/s=
</data>
<key>hash2</key>
<data>
tDeaqfSmsuTlX2h3g7Tmr7s5wCZumg9TJG5pKpMSHTM=
</data>
</dict>
<key>Headers/UMPage.h</key>
<dict>
<key>hash</key>
<data>
iDEulCPV+Ts1qh4XTYIIT6eYz3g=
</data>
<key>hash2</key>
<data>
BrhM9tqdBA/3L91G3fB6Zd4TDnuuv5NS4XbL8r7G1yQ=
</data>
</dict>
<key>PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
Tvto37j0/VhNsssb2KK8vt+bz80=
</data>
<key>hash2</key>
<data>
AN+41cR8Kh4TFlkxEXlc+KPioYQWdsVnoaCLixQmBS4=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>UMCommon.framework/UMCommon</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>UMCommon.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>UMCommon.framework/UMCommon</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>UMCommon.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@ -0,0 +1,488 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>ios-arm64/UMCommon.framework/Headers/MobClick.h</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>ios-arm64/UMCommon.framework/Headers/UMCommon.h</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>ios-arm64/UMCommon.framework/Headers/UMCommonDeepLink.h</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>ios-arm64/UMCommon.framework/Headers/UMConfigure.h</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>ios-arm64/UMCommon.framework/Info.plist</key>
<data>
IGs/ZebE0ThW8MtvDkLbgsstmPs=
</data>
<key>ios-arm64/UMCommon.framework/Modules/module.modulemap</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>ios-arm64/UMCommon.framework/PrivacyInfo.xcprivacy</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
<key>ios-arm64/UMCommon.framework/UMCommon</key>
<data>
gU9vaMbvgzDe1sG+WbIYmLXEKhg=
</data>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeDirectory</key>
<data>
tXcXCqj2UXPtn3YoX3o+WUtjvdg=
</data>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeRequirements</key>
<data>
j0dMaxLgbIIkYNpg8I98Oc1t5+o=
</data>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeRequirements-1</key>
<data>
olMXo2fTZXA+/ZAY7D8CrHGz+9M=
</data>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeResources</key>
<data>
u6HYoYjQOaRup5aAB3rN/xKAFto=
</data>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeSignature</key>
<data>
H4NM1DCadpWcHZbPebuB7yF6ry0=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/MobClick.h</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/UMCommon.h</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/UMCommonDeepLink.h</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/UMConfigure.h</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Info.plist</key>
<data>
rtcp+WsJC2YwM9hbVy51dyG9h0o=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Modules/module.modulemap</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/PrivacyInfo.xcprivacy</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/UMCommon</key>
<data>
zJS2Udh22g0XSXJ3BCyhh3Gtt24=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeDirectory</key>
<data>
LXAZKZuTvBrhBGwMeraYroslg/Y=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeRequirements</key>
<data>
OnX22wWFKRSOFN1+obRynMCeyXM=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeRequirements-1</key>
<data>
Zu/kXb7qUqyNPZ/QgnnOz1pFSDg=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeResources</key>
<data>
nrXAK2J8mLvJyoIND3MT4O9IRhU=
</data>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeSignature</key>
<data>
2jmj7l5rSw0yVb/vlWAYkK/YBwk=
</data>
</dict>
<key>files2</key>
<dict>
<key>ios-arm64/UMCommon.framework/Headers/MobClick.h</key>
<dict>
<key>hash</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>hash2</key>
<data>
4JomlZRSG99s2ope0nRTLgqEOcZBAturiAbXPi+tci4=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/Headers/UMCommon.h</key>
<dict>
<key>hash</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>hash2</key>
<data>
e9yuYwvC1/Q9IMqUAARaZcS2ep4C5A59KsuChvJIgVc=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/Headers/UMCommonDeepLink.h</key>
<dict>
<key>hash</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>hash2</key>
<data>
uRGqdGi52JpicoX+GN1et3kc5C9tc3LxT8o8DBzs/rY=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/Headers/UMConfigure.h</key>
<dict>
<key>hash</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>hash2</key>
<data>
FEu+Lfv45dOCaZ8txhRHeMeQw+7D+22U+Lu4Artrd4A=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/Info.plist</key>
<dict>
<key>hash</key>
<data>
IGs/ZebE0ThW8MtvDkLbgsstmPs=
</data>
<key>hash2</key>
<data>
6+7HtjOlKcjmVnJD4BiNaLQ4gypBSVrLrO5ECQuEi9A=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>hash2</key>
<data>
7IUYLzvNB91mENzgp1VlyNrCVWJbilyqXQ8mjTngIOw=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
<key>hash2</key>
<data>
Hp5g1n2ZA34u3lR9r3HvOSww1BUwL1QS/rftK9gr5CE=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/UMCommon</key>
<dict>
<key>hash</key>
<data>
gU9vaMbvgzDe1sG+WbIYmLXEKhg=
</data>
<key>hash2</key>
<data>
M3w09yUHOrEC8LQt0JNvJhfynWnbQvhUOuo9mriNcKc=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeDirectory</key>
<dict>
<key>hash</key>
<data>
tXcXCqj2UXPtn3YoX3o+WUtjvdg=
</data>
<key>hash2</key>
<data>
sTsEjmt9oMcg5SMmPmiVnDno8IM1N/ojddZRjeEX/kA=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeRequirements</key>
<dict>
<key>hash</key>
<data>
j0dMaxLgbIIkYNpg8I98Oc1t5+o=
</data>
<key>hash2</key>
<data>
yMYWLT6MUNf+sSJ3Jv8KzTYBjAg8LScEtCbTzsgiwBA=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeRequirements-1</key>
<dict>
<key>hash</key>
<data>
olMXo2fTZXA+/ZAY7D8CrHGz+9M=
</data>
<key>hash2</key>
<data>
eNoV8rmvazkqZQGtKkTOnVwkIIGqstX8OflmnInfprM=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeResources</key>
<dict>
<key>hash</key>
<data>
u6HYoYjQOaRup5aAB3rN/xKAFto=
</data>
<key>hash2</key>
<data>
JkNfdXPPTAXLN2EUqnX16wd1JRJANjiMM6jQTJbugT4=
</data>
</dict>
<key>ios-arm64/UMCommon.framework/_CodeSignature/CodeSignature</key>
<dict>
<key>hash</key>
<data>
H4NM1DCadpWcHZbPebuB7yF6ry0=
</data>
<key>hash2</key>
<data>
r2jQBIU9hD+dM7dGZa4bEjtlf9WtuOfEFlRm317YV9s=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/MobClick.h</key>
<dict>
<key>hash</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>hash2</key>
<data>
4JomlZRSG99s2ope0nRTLgqEOcZBAturiAbXPi+tci4=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/UMCommon.h</key>
<dict>
<key>hash</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>hash2</key>
<data>
e9yuYwvC1/Q9IMqUAARaZcS2ep4C5A59KsuChvJIgVc=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/UMCommonDeepLink.h</key>
<dict>
<key>hash</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>hash2</key>
<data>
uRGqdGi52JpicoX+GN1et3kc5C9tc3LxT8o8DBzs/rY=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Headers/UMConfigure.h</key>
<dict>
<key>hash</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>hash2</key>
<data>
FEu+Lfv45dOCaZ8txhRHeMeQw+7D+22U+Lu4Artrd4A=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Info.plist</key>
<dict>
<key>hash</key>
<data>
rtcp+WsJC2YwM9hbVy51dyG9h0o=
</data>
<key>hash2</key>
<data>
L6O3uQqzB8Cysn1z+IHmh4VQAVpNmnY4BRJVBUvii4k=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>hash2</key>
<data>
7IUYLzvNB91mENzgp1VlyNrCVWJbilyqXQ8mjTngIOw=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
<key>hash2</key>
<data>
Hp5g1n2ZA34u3lR9r3HvOSww1BUwL1QS/rftK9gr5CE=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/UMCommon</key>
<dict>
<key>hash</key>
<data>
zJS2Udh22g0XSXJ3BCyhh3Gtt24=
</data>
<key>hash2</key>
<data>
Fnxb3zyyVi8LLS8uRonfZzeag25n1eii3kDIl/OGvTQ=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeDirectory</key>
<dict>
<key>hash</key>
<data>
LXAZKZuTvBrhBGwMeraYroslg/Y=
</data>
<key>hash2</key>
<data>
LWWd5upAkuYngYSS0cmHW3+3GWzmlFyzI3orQHb+ApI=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeRequirements</key>
<dict>
<key>hash</key>
<data>
OnX22wWFKRSOFN1+obRynMCeyXM=
</data>
<key>hash2</key>
<data>
mHkgkE6rZQ51eIwFSqCwUk5qgL/HGqMt+NI3phdD+YY=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeRequirements-1</key>
<dict>
<key>hash</key>
<data>
Zu/kXb7qUqyNPZ/QgnnOz1pFSDg=
</data>
<key>hash2</key>
<data>
xE2kHPTZgZrzoQKVgPZK0xaXCi+hlOi3w34XwAHYf08=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeResources</key>
<dict>
<key>hash</key>
<data>
nrXAK2J8mLvJyoIND3MT4O9IRhU=
</data>
<key>hash2</key>
<data>
uw0k8v5K/oshX880lAPZQzl549WH2iUyBSi+LCVLQu8=
</data>
</dict>
<key>ios-arm64_x86_64-simulator/UMCommon.framework/_CodeSignature/CodeSignature</key>
<dict>
<key>hash</key>
<data>
2jmj7l5rSw0yVb/vlWAYkK/YBwk=
</data>
<key>hash2</key>
<data>
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,221 @@
//
// MobClick.h
// Analytics
//
// Copyright (C) 2010-2017 Umeng.com . All rights reserved.
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface MobClick : NSObject
#pragma mark event logs
///---------------------------------------------------------------------------------------
/// @name 页面计时
///---------------------------------------------------------------------------------------
/** 手动页面时长统计, 记录某个页面展示的时长.
@param pageName 统计的页面名称.
@param seconds 单位为秒int型.
*/
+ (void)logPageView:(NSString *)pageName seconds:(int)seconds;
/** 自动页面时长统计, 开始记录某个页面展示时长.
使用方法必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。
在该页面展示时调用beginLogPageView:当退出该页面时调用endLogPageView:
@param pageName 统计的页面名称.
*/
+ (void)beginLogPageView:(NSString *)pageName;
/** 自动页面时长统计, 结束记录某个页面展示时长.
使用方法必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。
在该页面展示时调用beginLogPageView:当退出该页面时调用endLogPageView:
@param pageName 统计的页面名称.
*/
+ (void)endLogPageView:(NSString *)pageName;
///---------------------------------------------------------------------------------------
/// @name 事件统计
///---------------------------------------------------------------------------------------
/** 自定义事件,数量统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID
@param eventId 网站上注册的事件Id.
@param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签.
@param accumulation 累加值。为减少网络交互可以自行对某一事件ID的某一分类标签进行累加再传入次数作为参数。
*/
+ (void)event:(NSString *)eventId; //等同于 event:eventId label:eventId;
/** 自定义事件,数量统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID
*/
+ (void)event:(NSString *)eventId label:(NSString *)label; // label为nil或@""时,等同于 event:eventId label:eventId;
/** 自定义事件,数量统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID
*/
+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes;
+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes counter:(int)number;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
beginEvent,endEvent要配对使用,也可以自己计时后通过durations参数传递进来
@param eventId 网站上注册的事件Id.
@param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签.
@param primarykey 这个参数用于和event_id一起标示一个唯一事件并不会被统计对于同一个事件在beginEvent和endEvent 中要传递相同的eventId 和 primarykey
@param millisecond 自己计时需要的话需要传毫秒进来
@warning 每个event的attributes不能超过100个
eventId、attributes中key和value都不能使用空格和特殊字符必须是NSString,且长度不能超过255个字符否则将截取前255个字符
id ts du是保留字段不能作为eventId及key的名称
*/
+ (void)beginEvent:(NSString *)eventId;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)endEvent:(NSString *)eventId;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)beginEvent:(NSString *)eventId label:(NSString *)label;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)endEvent:(NSString *)eventId label:(NSString *)label;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)beginEvent:(NSString *)eventId primarykey :(NSString *)keyName attributes:(NSDictionary *)attributes;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)endEvent:(NSString *)eventId primarykey:(NSString *)keyName;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)event:(NSString *)eventId durations:(int)millisecond;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)event:(NSString *)eventId label:(NSString *)label durations:(int)millisecond;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes durations:(int)millisecond;
#pragma mark - user methods
/** active user sign-in.
使用sign-In函数后如果结束该PUID的统计需要调用sign-Off函数
@param puid : user's ID
@param provider : 不能以下划线"_"开头,使用大写字母和数字标识; 如果是上市公司,建议使用股票代码。
*/
+ (void)profileSignInWithPUID:(NSString *)puid;
+ (void)profileSignInWithPUID:(NSString *)puid provider:(NSString *)provider;
/** active user sign-off.
停止sign-in PUID的统计
*/
+ (void)profileSignOff;
/** 设置用户属性(自定义)
用户属性设置一定要在账号统计调用后即profileSignInWithPUID:。
@param value : 用户属性值(NSString,NSNumber);
@param key : 用户属性键;
*/
+ (void)userProfile:(id)value to:(NSString *)key;
/** 设置用户属性(电话)
用户属性设置一定要在账号统计调用后即profileSignInWithPUID:。
@param mobile : 电话;
*/
+ (void)userProfileMobile:(NSString *)mobile;
/** 设置用户属性(邮箱)
用户属性设置一定要在账号统计调用后即profileSignInWithPUID:。
@param email : 邮箱;
*/
+ (void)userProfileEMail:(NSString *)email;
///---------------------------------------------------------------------------------------
/// @name 地理位置设置
/// 需要链接 CoreLocation.framework 并且 #import <CoreLocation/CoreLocation.h>
///---------------------------------------------------------------------------------------
/** 设置经纬度信息
@param latitude 纬度.
@param longitude 经度.
*/
+ (void)setLatitude:(double)latitude longitude:(double)longitude;
///---------------------------------------------------------------------------------------
/// @name Utility函数
///---------------------------------------------------------------------------------------
/** 判断设备是否越狱依据是否存在apt和Cydia.app
*/
+ (BOOL)isJailbroken;
/** 判断App是否被破解
*/
+ (BOOL)isPirated;
/** 设置 app secret
@param secret string
*/
+ (void)setSecret:(NSString *)secret;
/**
* 设置预置事件属性 键值对 会覆盖同名的key
*/
+(void) registerPreProperties:(NSDictionary *)property;
/**
*
* 删除指定预置事件属性
@param key
*/
+(void) unregisterPreProperty:(NSString *)propertyName;
/**
* 获取预置事件所有属性;如果不存在,则返回空。
*/
+(NSDictionary *)getPreProperties;
/**
*清空所有预置事件属性。
*/
+(void)clearPreProperties;
/**
* 设置关注事件是否首次触发,只关注eventList前五个合法eventID.只要已经保存五个,此接口无效
*/
+(void)setFirstLaunchEvent:(NSArray *)eventList;
/** 设置是否自动采集页面, 默认NO(不自动采集).
@param value 设置为YES, umeng SDK 会将自动采集页面信息
*/
+ (void)setAutoPageEnabled:(BOOL)value;
/**
*集成测试。
*/
+ (BOOL)handleUrl:(NSURL *)url;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,21 @@
//
// UMCommon.h
// UMCommon
//
// Created by San Zhang on 11/2/16.
// Copyright © 2016 UMeng. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for UMCommon.
FOUNDATION_EXPORT double UMCommonVersionNumber;
//! Project version string for UMCommon.
FOUNDATION_EXPORT const unsigned char UMCommonVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <UMCommon/PublicHeader.h>
#import <UMCommon/UMConfigure.h>
#import <UMCommon/MobClick.h>
#import <UMCommon/UMCommonDeepLink.h>

View File

@ -0,0 +1,69 @@
//
// UMCommonDeepLink.h
// UMMobClick
//
// Created by yanke on 2026/5/18.
// Copyright © 2026 UMeng. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
// In app event names constants
#define UMEventUserRegister @"um_onUMengUserRegister"
#define UMEventInAppConvert @"um_onUMengInAppConvert"
#define UMEventOrderRefund @"um_onUMengOrderRefund"
#define UMEventAdRevenueEvent @"um_onUMengAdRevenueEvent"
// In app event parameter names
#define UMEventParamRegisterMethod @"register_method"
#define UMEventParamRegisterTime @"register_time"
#define UMEventParamInviteCode @"invite_code"
#define UMEventParamOrderId @"order_id"
#define UMEventParamTransactionType @"transaction_type"
#define UMEventParamProductId @"product_id"
#define UMEventParamProductType @"product_type"
#define UMEventParamProductName @"product_name"
#define UMEventParamProductPrice @"product_price"
#define UMEventParamTime @"time"
#define UMEventParamPaymentMethod @"payment_method"
#define UMEventParamIsFirstPurchase @"is_first_purchase"
#define UMEventParamDiscountAmount @"discount_amount"
#define UMEventParamCouponId @"coupon_id"
#define UMEventParamCurrency @"currency"
#define UMEventParamRefundAmount @"refund_amount"
#define UMEventParamAdActionType @"ad_action_type"
#define UMEventParamAdPosition @"ad_position"
#define UMEventParamAdId @"ad_id"
#define UMEventParamAdFormat @"ad_format"
#define UMEventParamAdNetwork @"ad_network"
#define UMEventParamPrice @"price"
#define UMEventParamAdDuration @"ad_duration"
@protocol UMCommonDeepLinkDelegate<NSObject>
@optional
- (void)didResolveDeepLink:(NSDictionary *)params;
@end
@interface UMCommonDeepLink : NSObject
@property(weak, nonatomic) id<UMCommonDeepLinkDelegate> delegate;
+ (instancetype)sharedInstance;
- (void)getInstallParams:(void (^)(NSDictionary * _Nullable params, NSError * _Nullable error))completion;
- (BOOL)handleUserActivity:(NSUserActivity *)userActivity;
- (BOOL)handleOpenURL:(NSURL *)URL;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,67 @@
//
// UMConfigure.h
// UMCommon
//
// Created by San Zhang on 9/6/16.
// Copyright © 2016 UMeng. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface UMConfigure : NSObject
/** 初始化友盟所有组件产品
@param appKey 开发者在友盟官网申请的appkey.
@param channel 渠道标识可设置nil表示"App Store".
*/
+ (void)initWithAppkey:(NSString *)appKey channel:(NSString *)channel;
/** 设置是否在console输出sdk的log信息.
@param bFlag 默认NO(不输出log); 设置为YES, 输出可供调试参考的log信息. 发布产品时必须设置为NO.
*/
+ (void)setLogEnabled:(BOOL)bFlag;
/** 设置是否对日志信息进行加密, 默认NO(不加密).
@param value 设置为YES, umeng SDK 会将日志信息做加密处理
*/
+ (void)setEncryptEnabled:(BOOL)value;
+ (NSString *)umidString;
/**
集成测试需要device_id
*/
+ (NSString*)deviceIDForIntegration;
/** 是否开启统计默认为YES(开启状态)
@param value 设置为NO,可关闭友盟统计功能.
*/
+ (void)setAnalyticsEnabled:(BOOL)value;
//获取zid
+ (NSString *)getUmengZID;
//是否发送海外域名默认为YES发送海外域名
+(void)isInernational:(BOOL)bFlag;
//获取本次SessionID
+ (NSString *)getSessionID;
+ (void)resetStorePrefix:(NSString *)prefix;
+ (void)resetStorePath;
/** 设置上报统计日志的主域名。此函数必须在SDK初始化函数调用之前调用。
@param primaryDomain 传日志的主域名收数地址,参数不能为null或者空串。例如https://www.umeng.com
*/
+ (void)setDomain:(NSString *)primaryDomain;
/** 进端采集开关
@param flag YES 开启采集; NO 禁止采集
*/
+ (void)enablePi:(BOOL)flag;
/** 进端采集
@param connectionOptions: UIScene模式下的启动参数
*/
+ (void)handleSceneWillConnectWithOptions:(id)connectionOptions;
@end

View File

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

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
</dict>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/MobClick.h</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>Headers/UMCommon.h</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>Headers/UMCommonDeepLink.h</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>Headers/UMConfigure.h</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>Info.plist</key>
<data>
IGs/ZebE0ThW8MtvDkLbgsstmPs=
</data>
<key>Modules/module.modulemap</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>PrivacyInfo.xcprivacy</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/MobClick.h</key>
<dict>
<key>hash</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>hash2</key>
<data>
4JomlZRSG99s2ope0nRTLgqEOcZBAturiAbXPi+tci4=
</data>
</dict>
<key>Headers/UMCommon.h</key>
<dict>
<key>hash</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>hash2</key>
<data>
e9yuYwvC1/Q9IMqUAARaZcS2ep4C5A59KsuChvJIgVc=
</data>
</dict>
<key>Headers/UMCommonDeepLink.h</key>
<dict>
<key>hash</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>hash2</key>
<data>
uRGqdGi52JpicoX+GN1et3kc5C9tc3LxT8o8DBzs/rY=
</data>
</dict>
<key>Headers/UMConfigure.h</key>
<dict>
<key>hash</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>hash2</key>
<data>
FEu+Lfv45dOCaZ8txhRHeMeQw+7D+22U+Lu4Artrd4A=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>hash2</key>
<data>
7IUYLzvNB91mENzgp1VlyNrCVWJbilyqXQ8mjTngIOw=
</data>
</dict>
<key>PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
<key>hash2</key>
<data>
Hp5g1n2ZA34u3lR9r3HvOSww1BUwL1QS/rftK9gr5CE=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,221 @@
//
// MobClick.h
// Analytics
//
// Copyright (C) 2010-2017 Umeng.com . All rights reserved.
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface MobClick : NSObject
#pragma mark event logs
///---------------------------------------------------------------------------------------
/// @name 页面计时
///---------------------------------------------------------------------------------------
/** 手动页面时长统计, 记录某个页面展示的时长.
@param pageName 统计的页面名称.
@param seconds 单位为秒int型.
*/
+ (void)logPageView:(NSString *)pageName seconds:(int)seconds;
/** 自动页面时长统计, 开始记录某个页面展示时长.
使用方法必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。
在该页面展示时调用beginLogPageView:当退出该页面时调用endLogPageView:
@param pageName 统计的页面名称.
*/
+ (void)beginLogPageView:(NSString *)pageName;
/** 自动页面时长统计, 结束记录某个页面展示时长.
使用方法必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计,若只调用某一个函数不会生成有效数据。
在该页面展示时调用beginLogPageView:当退出该页面时调用endLogPageView:
@param pageName 统计的页面名称.
*/
+ (void)endLogPageView:(NSString *)pageName;
///---------------------------------------------------------------------------------------
/// @name 事件统计
///---------------------------------------------------------------------------------------
/** 自定义事件,数量统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID
@param eventId 网站上注册的事件Id.
@param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签.
@param accumulation 累加值。为减少网络交互可以自行对某一事件ID的某一分类标签进行累加再传入次数作为参数。
*/
+ (void)event:(NSString *)eventId; //等同于 event:eventId label:eventId;
/** 自定义事件,数量统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID
*/
+ (void)event:(NSString *)eventId label:(NSString *)label; // label为nil或@""时,等同于 event:eventId label:eventId;
/** 自定义事件,数量统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID
*/
+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes;
+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes counter:(int)number;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
beginEvent,endEvent要配对使用,也可以自己计时后通过durations参数传递进来
@param eventId 网站上注册的事件Id.
@param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签.
@param primarykey 这个参数用于和event_id一起标示一个唯一事件并不会被统计对于同一个事件在beginEvent和endEvent 中要传递相同的eventId 和 primarykey
@param millisecond 自己计时需要的话需要传毫秒进来
@warning 每个event的attributes不能超过100个
eventId、attributes中key和value都不能使用空格和特殊字符必须是NSString,且长度不能超过255个字符否则将截取前255个字符
id ts du是保留字段不能作为eventId及key的名称
*/
+ (void)beginEvent:(NSString *)eventId;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)endEvent:(NSString *)eventId;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)beginEvent:(NSString *)eventId label:(NSString *)label;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)endEvent:(NSString *)eventId label:(NSString *)label;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)beginEvent:(NSString *)eventId primarykey :(NSString *)keyName attributes:(NSDictionary *)attributes;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)endEvent:(NSString *)eventId primarykey:(NSString *)keyName;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)event:(NSString *)eventId durations:(int)millisecond;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)event:(NSString *)eventId label:(NSString *)label durations:(int)millisecond;
/** 自定义事件,时长统计.
使用前请先到友盟App管理后台的设置->编辑自定义事件 中添加相应的事件ID然后在工程中传入相应的事件ID.
*/
+ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes durations:(int)millisecond;
#pragma mark - user methods
/** active user sign-in.
使用sign-In函数后如果结束该PUID的统计需要调用sign-Off函数
@param puid : user's ID
@param provider : 不能以下划线"_"开头,使用大写字母和数字标识; 如果是上市公司,建议使用股票代码。
*/
+ (void)profileSignInWithPUID:(NSString *)puid;
+ (void)profileSignInWithPUID:(NSString *)puid provider:(NSString *)provider;
/** active user sign-off.
停止sign-in PUID的统计
*/
+ (void)profileSignOff;
/** 设置用户属性(自定义)
用户属性设置一定要在账号统计调用后即profileSignInWithPUID:。
@param value : 用户属性值(NSString,NSNumber);
@param key : 用户属性键;
*/
+ (void)userProfile:(id)value to:(NSString *)key;
/** 设置用户属性(电话)
用户属性设置一定要在账号统计调用后即profileSignInWithPUID:。
@param mobile : 电话;
*/
+ (void)userProfileMobile:(NSString *)mobile;
/** 设置用户属性(邮箱)
用户属性设置一定要在账号统计调用后即profileSignInWithPUID:。
@param email : 邮箱;
*/
+ (void)userProfileEMail:(NSString *)email;
///---------------------------------------------------------------------------------------
/// @name 地理位置设置
/// 需要链接 CoreLocation.framework 并且 #import <CoreLocation/CoreLocation.h>
///---------------------------------------------------------------------------------------
/** 设置经纬度信息
@param latitude 纬度.
@param longitude 经度.
*/
+ (void)setLatitude:(double)latitude longitude:(double)longitude;
///---------------------------------------------------------------------------------------
/// @name Utility函数
///---------------------------------------------------------------------------------------
/** 判断设备是否越狱依据是否存在apt和Cydia.app
*/
+ (BOOL)isJailbroken;
/** 判断App是否被破解
*/
+ (BOOL)isPirated;
/** 设置 app secret
@param secret string
*/
+ (void)setSecret:(NSString *)secret;
/**
* 设置预置事件属性 键值对 会覆盖同名的key
*/
+(void) registerPreProperties:(NSDictionary *)property;
/**
*
* 删除指定预置事件属性
@param key
*/
+(void) unregisterPreProperty:(NSString *)propertyName;
/**
* 获取预置事件所有属性;如果不存在,则返回空。
*/
+(NSDictionary *)getPreProperties;
/**
*清空所有预置事件属性。
*/
+(void)clearPreProperties;
/**
* 设置关注事件是否首次触发,只关注eventList前五个合法eventID.只要已经保存五个,此接口无效
*/
+(void)setFirstLaunchEvent:(NSArray *)eventList;
/** 设置是否自动采集页面, 默认NO(不自动采集).
@param value 设置为YES, umeng SDK 会将自动采集页面信息
*/
+ (void)setAutoPageEnabled:(BOOL)value;
/**
*集成测试。
*/
+ (BOOL)handleUrl:(NSURL *)url;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,21 @@
//
// UMCommon.h
// UMCommon
//
// Created by San Zhang on 11/2/16.
// Copyright © 2016 UMeng. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for UMCommon.
FOUNDATION_EXPORT double UMCommonVersionNumber;
//! Project version string for UMCommon.
FOUNDATION_EXPORT const unsigned char UMCommonVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <UMCommon/PublicHeader.h>
#import <UMCommon/UMConfigure.h>
#import <UMCommon/MobClick.h>
#import <UMCommon/UMCommonDeepLink.h>

View File

@ -0,0 +1,69 @@
//
// UMCommonDeepLink.h
// UMMobClick
//
// Created by yanke on 2026/5/18.
// Copyright © 2026 UMeng. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
// In app event names constants
#define UMEventUserRegister @"um_onUMengUserRegister"
#define UMEventInAppConvert @"um_onUMengInAppConvert"
#define UMEventOrderRefund @"um_onUMengOrderRefund"
#define UMEventAdRevenueEvent @"um_onUMengAdRevenueEvent"
// In app event parameter names
#define UMEventParamRegisterMethod @"register_method"
#define UMEventParamRegisterTime @"register_time"
#define UMEventParamInviteCode @"invite_code"
#define UMEventParamOrderId @"order_id"
#define UMEventParamTransactionType @"transaction_type"
#define UMEventParamProductId @"product_id"
#define UMEventParamProductType @"product_type"
#define UMEventParamProductName @"product_name"
#define UMEventParamProductPrice @"product_price"
#define UMEventParamTime @"time"
#define UMEventParamPaymentMethod @"payment_method"
#define UMEventParamIsFirstPurchase @"is_first_purchase"
#define UMEventParamDiscountAmount @"discount_amount"
#define UMEventParamCouponId @"coupon_id"
#define UMEventParamCurrency @"currency"
#define UMEventParamRefundAmount @"refund_amount"
#define UMEventParamAdActionType @"ad_action_type"
#define UMEventParamAdPosition @"ad_position"
#define UMEventParamAdId @"ad_id"
#define UMEventParamAdFormat @"ad_format"
#define UMEventParamAdNetwork @"ad_network"
#define UMEventParamPrice @"price"
#define UMEventParamAdDuration @"ad_duration"
@protocol UMCommonDeepLinkDelegate<NSObject>
@optional
- (void)didResolveDeepLink:(NSDictionary *)params;
@end
@interface UMCommonDeepLink : NSObject
@property(weak, nonatomic) id<UMCommonDeepLinkDelegate> delegate;
+ (instancetype)sharedInstance;
- (void)getInstallParams:(void (^)(NSDictionary * _Nullable params, NSError * _Nullable error))completion;
- (BOOL)handleUserActivity:(NSUserActivity *)userActivity;
- (BOOL)handleOpenURL:(NSURL *)URL;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,67 @@
//
// UMConfigure.h
// UMCommon
//
// Created by San Zhang on 9/6/16.
// Copyright © 2016 UMeng. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface UMConfigure : NSObject
/** 初始化友盟所有组件产品
@param appKey 开发者在友盟官网申请的appkey.
@param channel 渠道标识可设置nil表示"App Store".
*/
+ (void)initWithAppkey:(NSString *)appKey channel:(NSString *)channel;
/** 设置是否在console输出sdk的log信息.
@param bFlag 默认NO(不输出log); 设置为YES, 输出可供调试参考的log信息. 发布产品时必须设置为NO.
*/
+ (void)setLogEnabled:(BOOL)bFlag;
/** 设置是否对日志信息进行加密, 默认NO(不加密).
@param value 设置为YES, umeng SDK 会将日志信息做加密处理
*/
+ (void)setEncryptEnabled:(BOOL)value;
+ (NSString *)umidString;
/**
集成测试需要device_id
*/
+ (NSString*)deviceIDForIntegration;
/** 是否开启统计默认为YES(开启状态)
@param value 设置为NO,可关闭友盟统计功能.
*/
+ (void)setAnalyticsEnabled:(BOOL)value;
//获取zid
+ (NSString *)getUmengZID;
//是否发送海外域名默认为YES发送海外域名
+(void)isInernational:(BOOL)bFlag;
//获取本次SessionID
+ (NSString *)getSessionID;
+ (void)resetStorePrefix:(NSString *)prefix;
+ (void)resetStorePath;
/** 设置上报统计日志的主域名。此函数必须在SDK初始化函数调用之前调用。
@param primaryDomain 传日志的主域名收数地址,参数不能为null或者空串。例如https://www.umeng.com
*/
+ (void)setDomain:(NSString *)primaryDomain;
/** 进端采集开关
@param flag YES 开启采集; NO 禁止采集
*/
+ (void)enablePi:(BOOL)flag;
/** 进端采集
@param connectionOptions: UIScene模式下的启动参数
*/
+ (void)handleSceneWillConnectWithOptions:(id)connectionOptions;
@end

View File

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

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
</dict>
<dict>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
</dict>
</array>
</dict>
</plist>

View File

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/MobClick.h</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>Headers/UMCommon.h</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>Headers/UMCommonDeepLink.h</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>Headers/UMConfigure.h</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>Info.plist</key>
<data>
rtcp+WsJC2YwM9hbVy51dyG9h0o=
</data>
<key>Modules/module.modulemap</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>PrivacyInfo.xcprivacy</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/MobClick.h</key>
<dict>
<key>hash</key>
<data>
AD85SDWmAunSuXbfjqKAAjHR0iU=
</data>
<key>hash2</key>
<data>
4JomlZRSG99s2ope0nRTLgqEOcZBAturiAbXPi+tci4=
</data>
</dict>
<key>Headers/UMCommon.h</key>
<dict>
<key>hash</key>
<data>
nHLScuxIxZa65DnZD75JOHp/hsw=
</data>
<key>hash2</key>
<data>
e9yuYwvC1/Q9IMqUAARaZcS2ep4C5A59KsuChvJIgVc=
</data>
</dict>
<key>Headers/UMCommonDeepLink.h</key>
<dict>
<key>hash</key>
<data>
NAY4MWl2d8HjknoLHdXMG7yynBs=
</data>
<key>hash2</key>
<data>
uRGqdGi52JpicoX+GN1et3kc5C9tc3LxT8o8DBzs/rY=
</data>
</dict>
<key>Headers/UMConfigure.h</key>
<dict>
<key>hash</key>
<data>
pvtzieZ1xK9eZ/SD+JFT8FK97Kc=
</data>
<key>hash2</key>
<data>
FEu+Lfv45dOCaZ8txhRHeMeQw+7D+22U+Lu4Artrd4A=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
3T38ZtbNjD5SfDX8z/R7CuRCDY4=
</data>
<key>hash2</key>
<data>
7IUYLzvNB91mENzgp1VlyNrCVWJbilyqXQ8mjTngIOw=
</data>
</dict>
<key>PrivacyInfo.xcprivacy</key>
<dict>
<key>hash</key>
<data>
pov2ti4RA9UlcXF4VDg8qv94jqQ=
</data>
<key>hash2</key>
<data>
Hp5g1n2ZA34u3lR9r3HvOSww1BUwL1QS/rftK9gr5CE=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>UMDevice.framework/UMDevice</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>UMDevice.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>UMDevice.framework/UMDevice</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>UMDevice.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

Some files were not shown because too many files have changed in this diff Show More