Compare commits

...

43 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
5692134efc Align iOS home common apps and all-functions page with Android.
Add unified HomeCommonMenu/HomeAllFunctions diagnostics, rebuild all-functions from top-level menuList permissions, and document Home and AllFunctions module logic.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 09:40:02 +08:00
63fb0462d6 修复离线路径误弹位置上报超时窗,并优化提醒设置与定位 Loading 展示。
离线或倒计时未进入提醒窗口时不再弹出超时提醒;全局 Loading 支持按需展示定位文案,提前提醒选项抽成共用组件。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 16:22:55 +08:00
560b52fcc8 接入首页位置上报与在线倒计时,并优化上报交互体验。
持久化服务端 expired 过期时间戳以正确恢复倒计时,切换在线/离线与上报时展示定位 Loading,移除重复的成功 Alert,并将 Toast 调整为居中半透明样式。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 15:59:59 +08:00
d9f897038d 移除 Splash 固定 1.5 秒等待,并补充启动流程分析文档。
未登录冷启动可立即进入登录页;已登录仍等待 bootstrap 接口完成,但不再叠加人为延迟。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 15:27:18 +08:00
3dcfb99254 对齐 Android 立即收款页面 UI,并补齐推送状态与语音开关。
统一收款详情布局、设置金额弹窗和收款记录样式,接入 type 6/1 推送驱动与轮询 fallback,使 iOS 收款反馈与 Android 一致。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 15:17:09 +08:00
5bdf4a7dbf 同步 Android 启动页到 iOS,并在冷启动期间静默恢复登录态。
新增 SplashView、SplashCoordinator 与 Launch Screen 资源,移除冷启动 Lottie;LoginView 加载 App 配置。同时将 token 存储迁移至 UserDefaults,并更新相关测试与文档。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 14:59:44 +08:00
08492df6ce 新增门店订单与核销管理列表,对齐 Android 订单能力并完善账号级缓存。
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 14:46:10 +08:00
c4de3d17d0 移除订单 Tab 内门店与核销订单详情页及跳转入口。
列表卡片仅展示摘要,保留订单来源绑定与押金订单详情等其它子流程。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 13:36:27 +08:00
1970572edd 迁移合作订单完整能力,并统一 AppRoleCode 角色权限与首页菜单展示。
新增 CooperationOrder 模块(双 Tab 列表、获客员绑定、主 Tab 扫码)、订单来源/带客单绑定及配套 API 测试;同步引入 roleCode 权限匹配与相关单元测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 13:33:00 +08:00
d310d26293 修复 Tab 导航栈路径绑定,确保子页面 push 后立即响应。
直接观察 RouterPath 并绑定 NavigationStack,移除未使用的 AppTab/AppRouter 辅助 API。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 11:45:34 +08:00
8e34a45d50 移除 MJRefresh 依赖,恢复 SwiftUI 系统下拉刷新。
同时收紧各 ViewModel 内部 isLoading 可见性,避免不必要的视图刷新。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 10:55:45 +08:00
8997d1ba1c 集成 MJRefresh 并重构主 TabBar 为系统 TabView 样式。
新增 SwiftUI 桥接层与单元测试,更新 Tab 图标资源命名和多倍图,同步调整 UI Test 的 Tab/扫码定位逻辑。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 10:22:53 +08:00
79e735f628 为 TabBar 和扫码页补充 accessibilityIdentifier,并在模拟器/UI Test 中禁用真实相机采集。
预初始化各 Tab 路由容器,修正 iOS 17 ContentUnavailableView 调用,提升自定义 TabBar 与扫码流程的 UI Test 稳定性。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 09:34:09 +08:00
d27438b264 补充 Auth/Tasks/ScenicPermission/Live 单元测试,并完善 UI Test 登录与会话稳定性。
移除 LoginViewModel 硬编码账号,扩展登录流程测试覆盖;调整 ZLoginSmokeUITests 执行顺序与路由直达逻辑,避免清空 Keychain 影响其它用例。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-26 12:44:10 +08:00
aac8458b04 优化 UI Test 路由直达与会话复用,提升自定义 TabBar 下的稳定性。
新增启动参数直达首页与个人中心页面,引入 AppUITestRouteDriver 与 UITestSession 共享登录,并重构各模块用例的导航断言逻辑。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-26 11:25:36 +08:00
0c01ee26c3 新增完整 UI Test 回归套件,并完善启动隔离逻辑。
按模块拆分 XCUITest 用例与 Support 基础设施,UI Test 运行时跳过推送与排队 WebSocket,并将 Podfile 最低版本对齐 iOS 16。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-26 10:45:00 +08:00
529 changed files with 47806 additions and 2899 deletions

1
.gitignore vendored
View File

@ -47,4 +47,5 @@ fastlane/test_output
# Env / secrets
.env
.env.*
suixinkanUITests/UITestCredentials.local.plist
*.pem

View File

@ -6,7 +6,7 @@
iOS
- iOS App
- SwiftUI
- 最低支持 iOS 17
- 最低支持 iOS 16
- 只支持竖屏

44
Podfile
View File

@ -1,4 +1,4 @@
platform :ios, '17.0'
platform :ios, '16.0'
target 'suixinkan' do
use_frameworks!
@ -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: 50778cfc2820db549075417f39146c17f4bd07f1
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: 50778cfc2820db549075417f39146c17f4bd07f1
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

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/Pods-suixinkan/Pods-suixinkan-frameworks.sh
${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework

View File

@ -0,0 +1 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework

View File

@ -0,0 +1,2 @@
${PODS_ROOT}/Target Support Files/Pods-suixinkan/Pods-suixinkan-frameworks.sh
${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework

View File

@ -0,0 +1 @@
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework

View File

@ -0,0 +1,186 @@
#!/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
if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
# If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
# frameworks to, so exit 0 (signalling the script phase was successful).
exit 0
fi
echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
BCSYMBOLMAP_DIR="BCSymbolMaps"
# 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 .*.??????")
# Copies and strips a vendored framework
install_framework()
{
if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
local source="${BUILT_PRODUCTS_DIR}/$1"
elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
elif [ -r "$1" ]; then
local source="$1"
fi
local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
if [ -L "${source}" ]; then
echo "Symlinked..."
source="$(readlink -f "${source}")"
fi
if [ -d "${source}/${BCSYMBOLMAP_DIR}" ]; then
# Locate and install any .bcsymbolmaps if present, and remove them from the .framework before the framework is copied
find "${source}/${BCSYMBOLMAP_DIR}" -name "*.bcsymbolmap"|while read f; do
echo "Installing $f"
install_bcsymbolmap "$f" "$destination"
rm "$f"
done
rmdir "${source}/${BCSYMBOLMAP_DIR}"
fi
# 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/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
local basename
basename="$(basename -s .framework "$1")"
binary="${destination}/${basename}.framework/${basename}"
if ! [ -r "$binary" ]; then
binary="${destination}/${basename}"
elif [ -L "${binary}" ]; then
echo "Destination binary is symlinked..."
dirname="$(dirname "${binary}")"
binary="${dirname}/$(readlink "${binary}")"
fi
# Strip invalid architectures so "fat" simulator / device frameworks work on device
if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
strip_invalid_archs "$binary"
fi
# Resign the code if required by the build settings to avoid unstable apps
code_sign_if_enabled "${destination}/$(basename "$1")"
# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u)
for lib in $swift_runtime_libs; do
echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
code_sign_if_enabled "${destination}/${lib}"
done
fi
}
# Copies and strips a vendored dSYM
install_dsym() {
local source="$1"
warn_missing_arch=${2:-true}
if [ -r "$source" ]; then
# Copy the dSYM into the targets temp dir.
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
local basename
basename="$(basename -s .dSYM "$source")"
binary_name="$(ls "$source/Contents/Resources/DWARF")"
binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
# Strip invalid architectures from the dSYM.
if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
strip_invalid_archs "$binary" "$warn_missing_arch"
fi
if [[ $STRIP_BINARY_RETVAL == 0 ]]; then
# Move the stripped file into its final destination.
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
else
# The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
mkdir -p "${DWARF_DSYM_FOLDER_PATH}"
touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
fi
fi
}
# Used as a return value for each invocation of `strip_invalid_archs` function.
STRIP_BINARY_RETVAL=0
# Strip invalid architectures
strip_invalid_archs() {
binary="$1"
warn_missing_arch=${2:-true}
# Get architectures for current target binary
binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
# Intersect them with the architectures we are building for
intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
# If there are no archs supported by this binary then warn the user
if [[ -z "$intersected_archs" ]]; then
if [[ "$warn_missing_arch" == "true" ]]; then
echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
fi
STRIP_BINARY_RETVAL=1
return
fi
stripped=""
for arch in $binary_archs; do
if ! [[ "${ARCHS}" == *"$arch"* ]]; then
# Strip non-valid architectures in-place
lipo -remove "$arch" -output "$binary" "$binary"
stripped="$stripped $arch"
fi
done
if [[ "$stripped" ]]; then
echo "Stripped $binary of architectures:$stripped"
fi
STRIP_BINARY_RETVAL=0
}
# Copies the bcsymbolmap files of a vendored framework
install_bcsymbolmap() {
local bcsymbolmap_path="$1"
local destination="${BUILT_PRODUCTS_DIR}"
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
}
# Signs a framework with the provided identity
code_sign_if_enabled() {
if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
# Use the current code_sign_identity
echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
code_sign_cmd="$code_sign_cmd &"
fi
echo "$code_sign_cmd"
eval "$code_sign_cmd"
fi
}
if [[ "$CONFIGURATION" == "Debug" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework"
fi
if [[ "$CONFIGURATION" == "Release" ]]; then
install_framework "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework"
fi
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
wait
fi

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>

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