iphone iOS4破解应用

Posted

技术标签:

【中文标题】iphone iOS4破解应用【英文标题】:iphone iOS4 breaking app 【发布时间】:2010-06-23 04:22:34 【问题描述】:

我有一个应用程序自一年多前推出以来一直运行良好。

我最初是用 iphone ios 2.2.1 开发的,经过测试,一直销售到 3.2 都没有问题。

现在它无法在 iOS4 上启动。

该应用程序对 UIPickerView 使用了非标准尺寸(我认为这不是问题,但只需提及它,因为您会在控制台输出中看到一些抱怨)。它还提供以前未报告的NSAutoreleasePool 警告。

但罪魁祸首似乎是在将界面调整为新的 iphone 屏幕分辨率时(至少我从控制台得到的)

我知道我必须自己做一些研究,但 iOS4 推出的时间太少了,我一直非常专注于学习和开发我的第一个 android 应用程序(所以我没有测试这个特定的代码,一年后+这个应用程序每天只销售几份),我认为在这里询问是否有人有一些信息或已经遇到过它并没有害处。

首先,这是使用 XCODE 3.2.3 和 BASE SDK 3.2 构建和运行时的控制台输出,运行没有问题

2010-06-22 23:25:55.619 metalandmaterials[82956:207] ******* 辅助功能状态已更改:开启 2010-06-22 23:25:55.710 金属和材料[82956:207] ********** 为:xxxxxxxxx 加载 AX

但尝试使用 iOS4 运行它会带来这种美感:

2010-06-22 23:15:52.488 metalandmaterials[80149:207] ******* 辅助功能状态已更改:开启 2010-06-22 23:15:52.546 金属和材料[80149:207] ********** 为:XXXXXXX ************加载 AX 2010-06-22 23:15:53.003 metalandmaterials[80149:207] * -[NSAutoreleasePool release]: 这个池已经被释放了,不要排空它(双释放)。 2010-06-22 23:15:53.005 metalandmaterials[80149:207] * -[NSAutoreleasePool release]: 这个池已经被释放了,不要排空它(双释放)。 2010-06-22 23:15:53.008 metalandmaterials[80149:207]-[UIPickerView setFrame:]:无效高度值 50.0 固定到 162.0

就在这里! [UIIageView 比例]

2010-06-22 23:15:53.011 metalandmaterials[80149:207] -[UIImageView scale]:无法识别的选择器发送到实例 0x5ac47a0 2010-06-22 23:15:53.013 metalandmaterials[80149:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIImageView 比例]:无法识别的选择器发送到实例 0x5ac47a0”

第一次抛出时调用堆栈: ( 0 CoreFoundation 0x025f5919 异常预处理 + 185 1 libobjc.A.dylib 0x027435de objc_exception_throw + 47 2 CoreFoundation 0x025f742b -[NSObject(NSObject) 不识别选择器:] + 187 3 核心基础 0x02567116 ___forwarding_ + 966 4 核心基础 0x02566cd2 _CF_forwarding_prep_0 + 50 5 UIKit 0x0039a8e3 -[UIImageView setImage:] + 250 6 UIKit 0x0039b63e -[UIImageView initWithImage:] + 161 7 UIKit 0x05f286ce -[UIImageViewAccessibility(SafeCategory) initWithImage:] + 70 8 金属和材料 0x0000bf09 -[TVCResults init] + 1841 9 金属和材料 0x00002b8c -[UIVCalcHolder init] + 258 10 金属和材料 0x00002758 -[CalcTestAppDelegate applicationDidFinishLaunching:] + 649 11 UIKit 0x002d759c -[UIApplication_callInitializationDelegatesForURL:payload:suspended:] + 1252 12 UIKit 0x002d99a1 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 346 13 UIKit 0x002e3452 -[UIApplication handleEvent:withNewEvent:] + 1958 14 UIKit 0x002dc074 -[UIApplication sendEvent:] + 71 15 UIKit 0x002e0ac4 _UIApplicationHandleEvent + 7495 16 图形服务 0x02de1afa PurpleEventCallback + 1578 17 核心基础 0x025d6dc4 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52 18 核心基础 0x02537737 __CFRunLoopDoSource1 + 215 19 核心基础 0x025349c3 __CFRunLoopRun + 979 20 核心基础 0x02534280 CFRunLoopRunSpecific + 208 21 核心基础 0x025341a1 CFRunLoopRunInMode + 97 22 UIKit 0x002d9226 -[UIApplication_run] + 625 23 UIKit 0x002e4b58 UIApplicationMain + 1160 24 金属和材料 0x000024ac 主要 + 230 25 金属和材料 0x000023bd 开始 + 53 26 ??? 0x00000001 0x0 + 1 ) 在抛出“NSException”实例后调用终止 节目接收信号:“SIGABRT”。 杀 杀了

所以这个scale 方法对uiimageview 来说是新的吗?为什么它不起作用?有人遇到过这个吗?

非常感谢任何帮助

最好的问候 大卫

【问题讨论】:

这听起来绝对像是您应该向 Apple 提交错误报告的事情:developer.apple.com/bugreporter 他们确实很快就能解决这些问题。 我在 API Diff 中看到的关于规模的唯一内容是:developer.apple.com/iphone/library/documentation/UIKit/… 阿德里安,会的。大卫,现在会读但是我刚刚做了一个快速而肮脏的修复, - 创建了一个 MYUIImageView : UIImageView - 添加了一个 -(void)scale 方法,它什么都不做 - 将 UIImageViews 替换为 MYUIImageView 至少它可以工作我会填写一份报告并离开这个问题开放几天,以防其他人想贡献(可能会帮助其他人遇到这个问题)。我对解决此问题的兴趣主要与支持已经购买该应用程序的人有关。到目前为止,它不会产生任何值得花太多时间思考的收入。 【参考方案1】:

当一个对象已被释放但您仍在尝试使用它时,您通常会收到一条消息“xxxxxx 无法识别选择器 yyyyyy”。那时因为内存是随机的,系统认为它是其他随机类型的对象(如 UIImage)。因此,这是一条红鲱鱼,表明有其他问题并且您过度释放了一个对象。

除非您使用自定义自动释放池做某事,否则您不可能收到那些奇怪的自动释放消息。坦白说,你在代码中使用 NSAutoreleasePool 做什么?

我认为它们可能与“不识别选择器”消息有关,因为您可能因此而过度发布东西。

【讨论】:

我在下面提到我已经修复了自动释放池,但由于同样的原因,代码仍然会中断。上面我确实做了一个快速修复,它仍然有效(只需向 UIImageView 的子类添加一个 -(void)scale 方法并使用那个不优雅的方法,但是有效,但我仍然不知道原因 我会考虑打开 NSZombieEnabled,因为它会告诉你实际调用的是什么对象(它不是被调用的 UIImage)【参考方案2】:

嗯,对于 NSAutoreleasePool 的第一个问题,我会使用工具,以便您可以追踪额外的排放/释放来自何处。

您的第二个问题 doesNotRecognizeSelector 告诉您正在调用的选择器不存在(或丢失范围)。我会使用调试器,这样您就可以再次跟踪代码执行情况。

【讨论】:

大卫,我已经确定了自动释放池。那里没有问题。而且我知道 UIImageViews 没有缩放方法。我确实使用了一些 CGAffineTransforms 但我删除了它们只是想弄清楚发生了什么没有运气但是为什么哦为什么在 3.2 上完美运行的东西会像这样中断?我猜它发生在操作系统试图调整大小时。但我现在不知道后台发生了什么:(虽然感谢你的帮助,但希望得到更多的输入【参考方案3】:

好的,如果在 UIImageView 的子类中添加 -(void)scale 并使用这个新类,我就离开了。测试它,在 2.2.1、3.2 和 ios4 上都可以正常工作,无论是在模拟器上,还是在 iphone touch 3g 和 ios4 和 ipad 和 ios3.2 上。

我仍然需要使用 iphone4 并查看是否会遇到一些奇怪的布局问题(我仍然相信当操作系统想要将新的视网膜显示器炸毁时出现问题)。

虽然不在美国会有点困难

【讨论】:

我假设视网膜显示仅适用于具有缩放功能的应用程序。我怀疑他们会让每个应用程序都必须做的事情(有点像他们允许你关闭旋转的方式)。让每个人都回过头来为所有东西制作矢量图形,这样它就可以很好地缩放,这将是一件令人头疼的事情。【参考方案4】:

您是否可以在某处将 imageView 的 image 属性设置为另一个 UIImageView(而不是 UIImage)?

毕竟 UIImageView 不会响应 :scale,但 UIImage 会。

【讨论】:

以上是关于iphone iOS4破解应用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11沦陷,美执法部门已能破解几乎所有iPhone!

解锁工具盒曝光,分分钟破解 iPhone

JavaScript 如何从未破解的iPhone / iPod Touch连接到SOCKS代理

使用 JavaScript 在 iPhone Safari 上破解 QuickTime 播放器

1秒破解iPhone 13 Pro:可任意获取并删除设备上的数据

17岁破解iPhone,20岁搞疯索尼,26岁叫板特斯拉,如今他又造出了无人驾驶汽车