我的iPhone应用程序仅因使用(非常安全,似乎)私有方法+setAllowsAnyHTTPSCertificate:forHost:
而被拒绝NSURLRequest
.是否有非私有API来模拟此功能?
有没有办法以编程方式关闭iOS中的显示?不只是降低亮度,而是关闭电话应用程序的方式.我很乐意使用私有API,因为这是供个人使用.
谢谢!
我希望以编程方式在我的应用程序中启动Siri,而不是让用户按住主页按钮.由于没有可用于实现此目的的公共API,我想知道,如果有人能够通过私有API以编程方式启动Siri,那么您使用了哪些私有API?
我对Siri的任何返回值都不感兴趣.我想要做的就是启动它.
使用Xcode 7.3/iOS 9.3 Apple从iOS SDK中删除了所有私有框架.出于研究目的(不是App Store!),我需要使用私有框架(即BluetoothManager.framework
,这也是任何其他私有框架的问题).
因为这些框架不再在iOS SDK中提供,所以如果我的项目尝试显式链接到此框架,则会出现构建(链接器)错误.
对于长期(呃) - 期限解决方案的任何想法?
如何让应用程序名称在前台运行?它在iOS 7中使用SpringBoard,但在iOS 8中我没有得到结果.任何帮助表示赞赏.我不需要在苹果商店提交我的应用程序,所以如果还有任何补丁或脚本,请告诉我.
代码在iOS 8.0以下正常运行
- (NSMutableString*) getActiveApps
{
mach_port_t *port;
void *lib = dlopen(SBSERVPATH, RTLD_LAZY);
int (*SBSSpringBoardServerPort)() =
dlsym(lib, "SBSSpringBoardServerPort");
port = (mach_port_t *)SBSSpringBoardServerPort();
dlclose(lib);
//mach_port_t * port = [self getSpringBoardPort];
// open springboard lib
//void *lib = dlopen(SBSERVPATH, RTLD_LAZY);
// retrieve function SBFrontmostApplicationDisplayIdentifier
void *(*SBFrontmostApplicationDisplayIdentifier)(mach_port_t *port, char *result) =
dlsym(lib, "SBFrontmostApplicationDisplayIdentifier");
// reserve memory for name
char appId[256];
memset(appId, 0, sizeof(appId));
// retrieve front app name
SBFrontmostApplicationDisplayIdentifier(port, appId);
// close dynlib
dlclose(lib);
return [[NSString stringWithFormat:@"%s", appId] retain];
} …
Run Code Online (Sandbox Code Playgroud) 我想用不同的系统文本大小选项轻松测试我的应用程序,包括可访问性大小.这些可以在"设置"应用中设置(显示和亮度=>文字大小或常规=>辅助功能=>较大文本).
我目前可以找到的唯一方法是进入设置并使用UI更改值(编辑:下面描述的部分解决方案).这很慢而且很麻烦.我怀疑有一种方法可以使用私有API动态地改变它,但我无法弄清楚如何.由于我的目标是仅将其用于调试,因此私有API使用和调配很好(此代码不会用于生产).
为了尝试找到一个私有API来实现这一点,我查看了一些逆向工程资源.我是新的反汇编程序,符号表,类转储,以及查找我可以使用的私有API,但这是我到目前为止所尝试的:
我成功地调高了-[UIApplication preferredContentSizeCategory]
(其他帖子说这在过去有效),但这不会影响从中返回的结果+[UIFont preferredFontForTextStyle:]
.
使用反汇编程序IDA,我发现它+[UIFont preferredFontForTextStyle:]
位于私有框架中UIFoundation.framework
.(-[UIApplication preferredContentSizeCategory]
在,UIKit.framework
但反汇编并没有看起来有用).
正如我开始写这个问题(它总是这样发生),我发现了一个部分解决方案.可以在方案中设置启动参数以在启动时设置值.这很有用,但不是我追求的.
通过上面的回答,我发现用户偏好的值显然存储在" com.apple.UIKit.plist
位于模拟器data/Library/Preferences
目录中的文件"中.我们所追求的值可以从命令行实用程序设置plutil
.这也是一种改进!但是我想在运行时动态地改变它.
更多关于IDA的结果:
我真的不知道如何阅读反汇编,但+[UIFont preferredFontForTextStyle:]
似乎指向一个符号___UIFontForTextStyle
,它似乎指向一些有趣的符号,称为_getUIContentSizeCategoryUnspecified
和_getUIContentSizeCategoryPreferenceClass
"符号在小对象的未初始化数据部分中." .我不知道这意味着什么(我收集到的只是他们不是一个阶级或方法).
在网上搜索_getUIContentSizeCategory...
符号不会产生任何结果,但附近还有另一个符号_getUIApplicationClass
.我搜索了那个,因为它听起来更一般,并在一些WebKit源代码中发现了类似的东西.可能一无所获,但也许这是Apple的内部约定.无论如何,这个例子并没有真正帮助我解决问题.
无论如何感谢阅读到目前为止.如果你还在这里,我的问题是:
我希望能够动态模拟动态类型大小首选项的值.这些反汇编符号可能有所帮助,但也许我走错了路.感觉解决方案很接近,但我不能将所有部分放在一起.
将此值设置为启动参数很好,但不能完全解决我的问题.同样,修改模拟器的值plist
也很适合自动化,但不能解决我的问题.
有没有办法在运行时动态更改此值?
我正在寻找一些私有API或一段代码,这将允许我重新启动iOS设备或重新启动Springboard.
我查看了SBReboot,但看起来它受某些权利的保护.
此外,我尝试了reboot(int)和reboot2(int),但看起来它们都只适用于"root"用户,并且不会为"移动"用户做任何事情.
我正在寻找适用于非越狱设备的解决方案.但是,私有API是可以的(应用程序不会去AppStore)
更新1
回应乔赛亚的回答如下.寻找获得root权限的expoit并不是唯一的选择.例如,任何允许崩溃内核或Springboard的漏洞对我来说都没问题(即使它不能用于获取root权限).
在iOS7之前我使用UIGetScreenImage()
函数来轻松截取屏幕截图,但在iOS7中,它已被弃用,现在有什么好方法可以存档吗?谢谢!
另外:我需要在任何视图中截取整个屏幕的截图
如何调用非公共iOS函数并从Swift访问非公共属性?具体来说,我想在QuartzCore框架中使用一个非公共类.
我想到的一个解决方案是创建"桥接"Objective-C项目,将非公共API包装到公共API中,然后从Swift中调用这个Objective-C函数.但是,我的解决方案现在是纯粹的Swift,我宁愿保持这种方式.有没有更坚定的方式?(例如向Objective-C桥接头文件添加内容)
注意:我知道你在想什么,私有API是私有的,因为它们不应该被使用.我知道风险,我知道所有的烦恼,应用程序商店限制等.经过仔细考虑和大量的研究,不幸的是,这似乎仍然是这个特殊情况下的最佳方式.
我有一个私人应用程序需要扫描所有应用程序和方案,并使用私有API LSApplicationWorkspace defaultWorkspace
与其他功能方法,如privateURLSchemes
allInstalledApplications
.这个应用程序运行良好,我可以在iOS 11之前从私有API获得我所需要的一切,但在这个版本中我只得到一些警告和一个空数组.似乎Apple限制了开发人员无法在iOS 11中私下使用的私有API.
所以我的问题是在iOS 11中有哪些替代方法可以满足我的需求?
ios ×9
objective-c ×4
iphone ×3
cocoa ×1
cocoa-touch ×1
cydia ×1
disassembly ×1
ios11 ×1
ios8 ×1
ios9.3 ×1
nsurlrequest ×1
quartz-core ×1
siri ×1
swift ×1
tweak ×1
uifont ×1
xcode ×1