标签: leanplum

A/B测试平台如何动态取代Objective-C资产?

适用于iOS的Leanplum,Apptimize和其他A/B测试平台能够从Web下载资产(nib文件,图像等)并在运行时替换它们.

天真的方法是下载新资产并将其替换为资源包目录,但由于权限,无法将文件写入资源目录.

问题是,这些A/B测试平台在运行时使用什么技术来替换资产?

编辑:

在读取leanplum静态库文件(使用nm)上的符号后,似乎它们是Swizzling可可文件系统API.

例如:(示例行nm -m leanplum.a)

 -[NSBundle(LeanplumExtension) leanplum_URLForResource:withExtension:]
Run Code Online (Sandbox Code Playgroud)

通过使用otool,我可以打印实现:

-[NSBundle(LeanplumExtension) leanplum_URLForResource:withExtension:]:
0000000000000069        pushq   %rbp
000000000000006a        movq    %rsp, %rbp
000000000000006d        pushq   %r15
000000000000006f        pushq   %r14
0000000000000071        pushq   %r13
0000000000000073        pushq   %r12
0000000000000075        pushq   %rbx
0000000000000076        subq    $0x18, %rsp
000000000000007a        movq    %rcx, %rbx
000000000000007d        movq    %rdi, 0xffffffffffffffc8(%rbp)
0000000000000081        movq    %rdx, %rdi
0000000000000084        callq   _objc_retain
0000000000000089        movq    %rax, %r14
000000000000008c        movq    %rbx, %rdi
000000000000008f        callq   _objc_retain
0000000000000094        movq    %rax, 0xffffffffffffffd0(%rbp)
0000000000000098        movq    _originalMainBundle(%rip), %rcx
000000000000009f        movq    "+[NSBundle(LeanplumExtension) leanplum_mainBundle]"(%rcx), …
Run Code Online (Sandbox Code Playgroud)

objective-c ab-testing ios leanplum

13
推荐指数
1
解决办法
892
查看次数

标签 统计

ab-testing ×1

ios ×1

leanplum ×1

objective-c ×1