2023年ios开发问题记录

互联网寒冬已至,很多人会陷入从一家倒闭的公司,加入另一家可能也会很快倒闭的公司的境地。

1.Release下通过Python-Apple-support和 PythonKit来实现调用python崩溃,该问题来自电鸭社区。目前已查明原因,也有不太完美的解决办法。(别人)

我在iOS项目里,通过Python-Apple-support和 PythonKit来实现调用python。
按照Python-Apple-support在git上的USAGE完成集成后,目前debug下可以正常调用。
但是testfliight或release模式下,
设置 pythonPath 和Py_Initialize()时没有崩溃:

guard let stdLibPath = Bundle.main.path(forResource: "python-stdlib", ofType: nil) else { return }
guard let stdDynloadPath = Bundle.main.path(forResource: "python-stdlib/lib-dynload", ofType: nil) else { return }
setenv("PYTHONHOME", stdLibPath, 1)
setenv("PYTHONPATH", "(stdLibPath):(stdDynloadPath)", 1)
Py_Initialize()
//以上内容会被执行不会导致崩溃,并且debug下后续可以正常调用,路径应该是有效的

然后调用Python会崩溃:

//调用自定义的python文件
let py = Python          //这里会闪退
let a = py.import("diffTool")
let test = a.diff_modelTest("123123123","123123123")

经检查,闪退在PythonKit的这里:
PythonKit-> PythonLibrary+Symbols:Py_IncRef(pointer)
看起来似乎是个指针错误,在Xcode里看到了很多0x0000000000000000
比如:
sharedMethodDefinition UnsafeMutablePointer 0x0000000000000000

2.修改了pod里的源码,担心下次被覆盖,如何解决?(别人)

在JavaScript世界中,针对修改了NPM三方库的情况,可以使用patch-package这个库,来生成和应用代码补丁。那么针对cocoapod我们能采取哪些措施呢?

如果你依赖的是一个有完整项目,可独立调试的代码仓库,那你可以fork一份,然后修改提交后,在podfile里,将原来指向git公共仓库的三方,使用以下配置,将其指向我们自己的仓库:

pod 'Alamofire', :git => 'https://github.com/XXX/Alamofire.git', :commit => '0f506b1c45'

如果下次主仓库更新了,我们可以拉取合并最新代码,指定最新的commit或者不指定。

但有时候三方库可能只给了压缩文件,例如腾讯IM的TUI库是很多zip文件,每个文件里又有很多subspec。这时候自己建仓库就会比较麻烦。一个简单的解决方式是将每个TUI开头的库拖动到podfile同一个文件层级,然后下载对应版本的podspec文件到其目录。最后在Podfile里指定

pod 'TUICore', :path => 'TUICore'

这样pod会从本地文件系统将代码引入pod target,而不必担心会下载网络版本,导致本地修改被覆盖。 这项技术叫做Development Pods。

3.拼多多MonkeyDev逆向报错:code:-402620415和-402653103,安装后没有全屏,没有图标,并且会崩溃。目前MonkeyDev的脚本在新版Xcode编译系统中存在一些时序层面的问题,导致生成的plist文件存在问题,导致全屏、图标、bundle id这些问题。第一次编译的时候,设置MONKEYDEV_DEFAUTL_BUNDLEID=YES,在iOS16手机上报如下错 An unknown error has occurred. Domain: com.apple.dt.MobileDeviceErrorDomain Code: -402620415。这时候bundle id是原版的,但是会报错。再次编译的时候,bundle id变成了我们工程里设置的,这时候会报code:-402653103,APP可以被安装到手机,但是无法自动启动。手动启动后会崩溃,拼多多应该是做了一些防护。要解决以上问题,需要关注Xcode的编译时序问题,特别是有一步会生成empty-appname.plist,会穿插在MonkeyDev的pack活动前后,导致出现问题。(别人)

你可能感兴趣的:(ios)