使用 xcode 上传存档:前缀或后缀无效
Posted
技术标签:
【中文标题】使用 xcode 上传存档:前缀或后缀无效【英文标题】:Uploading archive with xcode: Invalid prefix or suffix 【发布时间】:2020-02-26 15:31:21 【问题描述】:早上好,
我正在尝试通过 Xcode 上传我的第一个应用程序。一切看起来都很好。我创建存档,如果我运行 Validate App,结果是有效的。
但是每当我尝试上传它时,它都会失败并显示以下消息:
执行时出现一般异常。 发生异常:前缀或后缀无效。
我没有发现任何类似的东西或任何可能发生的事情的提示。
任何帮助将不胜感激。
更新:使用 transporter 得到了这个日志
[2020-02-26 13:19:30 GMT-03:00] <main> DBG-X: parameter Success = true
[2020-02-26 13:19:30 GMT-03:00] <main> ERROR: There was a general exception while executing
[2020-02-26 13:19:30 GMT-03:00] <main> ERROR: An exception has occurred: Invalid prefix or suffix
[2020-02-26 13:19:30 GMT-03:00] <main> DEBUG: java.lang.IllegalArgumentException: Invalid prefix or suffix
at java.nio.file.TempFileHelper.generatePath(TempFileHelper.java:63)
at java.nio.file.TempFileHelper.create(TempFileHelper.java:127)
at java.nio.file.TempFileHelper.createTempFile(TempFileHelper.java:161)
at java.nio.file.Files.createTempFile(Files.java:897)
at com.apple.transporter.transport.http.impl.ObjectStoreTransport.transmitFilesForRequest(ObjectStoreTransport.java:455)
at com.apple.transporter.transport.http.impl.ObjectStoreTransport.performDiagnostic(ObjectStoreTransport.java:435)
at com.apple.transporter.transport.TransportByPodPolicy.performDiagnostic(TransportByPodPolicy.java:205)
at com.apple.transporter.operation.Upload.performDiagnosticForTransport(Upload.java:474)
at com.apple.transporter.operation.Upload.performUploadRequest(Upload.java:283)
at com.apple.transporter.operation.Upload.performUploadRequest(Upload.java:129)
at com.apple.transporter.operation.Upload.performRequest(Upload.java:1268)
at com.apple.transporter.operation.Verify.execute(Verify.java:120)
at com.apple.transporter.Application.reallyBegin(Application.java:224)
at com.apple.transporter.Application.begin(Application.java:114)
at com.apple.transporter.osgi.TransporterService.start(TransporterService.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.apple.transporter.starter.TransporterStarter.runService(TransporterStarter.java:476)
at com.apple.transporter.starter.TransporterStarter.runTransporterService(TransporterStarter.java:450)
at com.apple.transporter.starter.TransporterStarter.start(TransporterStarter.java:188)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.apple.transporter.bootstrap.BootstrapperPhase2.runStartable(BootstrapperPhase2.java:355)
at com.apple.transporter.bootstrap.BootstrapperPhase2.runStarter(BootstrapperPhase2.java:317)
at com.apple.transporter.bootstrap.BootstrapperPhase2.start(BootstrapperPhase2.java:130)
at com.apple.transporter.bootstrap.BootstrapperPhase1.startOSGiFramework(BootstrapperPhase1.java:321)
at com.apple.transporter.bootstrap.BootstrapperPhase1.bootstrap(BootstrapperPhase1.java:99)
at com.apple.transporter.bootstrap.BootstrapperPhase1.bootstrap(BootstrapperPhase1.java:59)
at com.apple.transporter.launcher.Launcher.launchBootstrapper(Launcher.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.apple.transporter.launcher.Application.start(Application.java:220)
at com.apple.transporter.launcher.Application.main(Application.java:658)
[2020-02-26 13:19:30 GMT-03:00] <main> DBG-X: Returning 1
可能与生成的 IPA 无关?
【问题讨论】:
【参考方案1】:就在我开始反编译 .jar 文件以尝试对其进行逆向工程时,我的同事告诉我他是如何解决这个问题的。这纯粹是精神错乱。
首先,使用 Transporter 应用程序(从应用商店获取)。打开它并转到首选项。取消选中“Signiant”传输协议,如下所示:
现在从您构建的存档中导出 .ipa 或 .pkg 包,将其放入 Transporter 并开始上传。
如何导出包:
转到管理器(窗口 -> 管理器),选择您的捆绑包并按“分发应用程序”。选择 App Store Connect -> 导出 -> ...
【讨论】:
它帮了我很多..!!【参考方案2】:tl;博士;
1) 将您的时区更改为 UTC 或
2) 将行 DEFAULT_JVM_OPTIONS="-Duser.timezone=UTC$DEFAULT_JVM_OPTIONS:+ $DEFAULT_JVM_OPTIONS"
添加到文件 iTMSTransporter
就在JAVA_EXECUTABLE=$JVM_EXECUTABLE
之前。
XCode 的文件位于 /Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Versions/A/itms/bin
或 Transporter 的 /Applications/Transporter.app/Contents/itms/bin
。在这个答案的时候。在未来的版本中可能会发生变化。
详情:
我遇到了同样的问题,在花了一大堆时间在谷歌上搜索解决方案后,我最终调试了传输器 jar 文件。 原来它使用用户时区来生成一些临时文件,如果时区包含“/”,它将失败,因为它不允许在文件名中,因为它是文件夹分隔符。如此愚蠢的错误和运输工具开发人员的耻辱!
我不是 Java 开发人员,对 Java 程序如何运行和使用所有这些 tmp 文件和时区的知识为零,因此不知道是否有其他方法可以解决该问题。如果有人最终会得到更好的解决方案,请分享。 不管怎样,我要报告一个错误。
【讨论】:
我只是想知道为什么它过去大部分时间都可以工作,有时会发生这个错误。我没有改变我的时区或任何东西。而且它也没有解释为什么禁用“Signiant”协议有效。这太奇怪了。 天哪!方法 #2 很有帮助!我已经被这个问题困扰了两个月,不得不使用关闭了signiant选项的运输工具。 添加行帮助 你是最棒的! UTC 时区对我有用! sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime【参考方案3】:不知道具体原因,但更改 Wifi 连接有效。
在以下位置找到有关此错误的其他信息: https://forums.developer.apple.com/thread/128983
【讨论】:
以上是关于使用 xcode 上传存档:前缀或后缀无效的主要内容,如果未能解决你的问题,请参考以下文章
使用准备好的语句将多个带前缀的表移动到存档数据库,为啥这个 MySQL 语句无效?
Xcode 存档验证错误 - Xcode 9 和 Swift 4