AdColonyPostProcessBuild

AdColonyPostProcessBuild

我有一个完整的游戏可以在Android中正常运行,并且已经在Play商店中发布了。现在我想在iTunes上提交它。当我开始为iOS构建相同的项目时,我遇到了这个奇怪的错误-

IOException: Sharing violation on path /Users/abhi/Projects/Unity/XCode Proj/Hammer Inc/Unity-iPhone.xcodeproj/project.pbxproj
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/FileStream.cs:320)
System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share)
(wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)
System.IO.File.OpenRead (System.String path) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/File.cs:363)
System.IO.StreamReader..ctor (System.String path, System.Text.Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/StreamReader.cs:167)
System.IO.StreamReader..ctor (System.String path)
(wrapper remoting-invoke-with-check) System.IO.StreamReader:.ctor (string)
System.IO.File.OpenText (System.String path) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/File.cs:368)
System.IO.File.ReadAllLines (System.String path) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/File.cs:560)
AdColonyPostProcessBuild.updateXcodeProject (System.String pbxProjectFilePath, System.String thirdPartyFrameworkDirectoryPath, .Framework[] frameworksToAdd) (at Assets/Editor/AdColonyPostProcessBuild.cs:356)
AdColonyPostProcessBuild.OnPostProcessBuild (BuildTarget target, System.String path) (at Assets/Editor/AdColonyPostProcessBuild.cs:340)
UnityEditor.HostView:OnGUI()


我遇到了这个错误,因为我在使用GPG插件时遇到了麻烦,并且如here所述,我删除了与Google Play游戏相关的文件和文件夹,因为我计划在iOS中使用Game Center。

我目前在同一项目中使用Native-X,Adcolony,Revmob(我知道这太多了,但这是由于选择适当网络的实验所致)。我不确定哪个插件会引起冲突。

我尝试删除AdColonyPostProcessBuild.cs文件,但出现以下错误-

KeyNotFoundException: The given key was not present in the dictionary.
System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (.TKey
key) (at
/Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/
corlib/System.Collections.Generic/Dictionary.cs:150)
UnityEditor.XCodeEditor.PBXResolver.ResolveName (System.String guid) (at
Assets/Editor/iOS/PBX Editor/PBXParser.cs:49)
UnityEditor.XCodeEditor.PBXResolver.ResolveName (System.String guid) (at
Assets/Editor/iOS/PBX Editor/PBXParser.cs:53)
UnityEditor.XCodeEditor.PBXParser.GUIDComment (System.String guid,
System.Text.StringBuilder builder) (at Assets/Editor/iOS/PBX
Editor/PBXParser.cs:218)
UnityEditor.XCodeEditor.PBXParser.SerializeString (System.String
aString, System.Text.StringBuilder builder, Boolean useQuotes, Boolean
readable) (at Assets/Editor/iOS/PBX Editor/PBXParser.cs:546)
UnityEditor.XCodeEditor.PBXParser.SerializeDictionary
(System.Collections.Generic.Dictionary`2 dictionary,
System.Text.StringBuilder builder, Boolean readable, Int32 indent) (at
Assets/Editor/iOS/PBX Editor/PBXParser.cs:481)
UnityEditor.XCodeEditor.PBXParser.SerializeValue (System.Object value,
System.Text.StringBuilder builder, Boolean readable, Int32 indent) (at
Assets/Editor/iOS/PBX Editor/PBXParser.cs:439)
UnityEditor.XCodeEditor.PBXParser.SerializeDictionary
(System.Collections.Generic.Dictionary`2 dictionary,
System.Text.StringBuilder builder, Boolean readable, Int32 indent) (at
Assets/Editor/iOS/PBX Editor/PBXParser.cs:489)
UnityEditor.XCodeEditor.PBXParser.SerializeValue (System.Object value,
System.Text.StringBuilder builder, Boolean readable, Int32 indent) (at
Assets/Editor/iOS/PBX Editor/PBXParser.cs:439)
UnityEditor.XCodeEditor.PBXParser.Encode
(UnityEditor.XCodeEditor.PBXDictionary pbxData, Boolean readable) (at
Assets/Editor/iOS/PBX Editor/PBXParser.cs:177)
UnityEditor.XCodeEditor.XCProject.CreateNewProject
(UnityEditor.XCodeEditor.PBXDictionary result, System.String path) (at
Assets/Editor/iOS/XCProject.cs:620)
UnityEditor.XCodeEditor.XCProject.Save () (at
Assets/Editor/iOS/XCProject.cs:645) XCodePostProcess.OnPostProcessBuild
(BuildTarget target, System.String path) (at
Assets/Editor/iOS/XCodePostProcess.cs:35) UnityEditor.HostView:OnGUI()


有没有人以前遇到过这个问题并找到了解决方案?我不想从项目中删除每个SDK,然后重新开始构建。

最佳答案

我看到您有几个问题。听起来真是个无赖。但是,我一定会提供帮助。

发生了什么:

关于您提供的第一个错误,它似乎在读取Unity为iOS构建过程创建的pbxproj文件时遇到问题。

通常,在为iOS构建时,Unity将与其余XCode项目一起创建.pbxproj文件,然后将其放置在您指定的目标构建目录中。之后,它会触发开发人员已挂接的任何后期处理构建逻辑。

通常,AdColony的AdColonyPostProcessBuild.cs文件应在后期处理构建逻辑中最后运行,因为我们依赖于解析.pbxproj文件本身,然后逐行添加信息。我们之所以愿意最后这样做,是因为存在针对该问题的当前解决方案,这些解决方案不一定能促进我们所需的所有配置,但其他开发人员会使用它。

第一个错误似乎是访问冲突问题,其中AdColonyPostProcessBuild无法访问.pbxproj文件,因此它可以读取所有行。因此,它抛出了IOException:

IOException:在路径/ Users / abhi / Projects / Unity / XCode Proj / Hammer Inc / Unity-iPhone.xcodeproj / project.pbxproj上共享冲突



System.IO.File.ReadAllLines(System.String路径)(位于/Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.IO/File.cs:560)
AdColonyPostProcessBuild.updateXcodeProject(System.String pbxProjectFilePath,System.StringthirdPartyFrameworkDirectoryPath,.Framework [] frameworksToAdd)(位于Assets / Editor / AdColonyPostProcessBuild.cs:356)

这把我带到了下一点。

您列出的第二个错误是由一种称为“ XCode Editor For Unity”的后期处理生成逻辑引起的。

你可以在这里找到它:

https://github.com/dcariola/XCodeEditor-for-Unity

此解决方案是称为mod_pbxproj的解决方案的C#实现,其他开发人员已选择此解决方案。但是,与AdColony结合使用时,如果在运行AdColonyPostProcessBuild.cs之后执行Unity的XCode编辑器,则通常会中断。

这是因为运行AdColonyPostProcessBuild.cs时,用于XCode编辑器进行Unity解析的某些信息已被复制并被读取两次。

AdColony已将我们的后处理逻辑配置为最后运行,这取决于运行XCode Editor For Unity后能够解析信息。

建议的解决方案

您提供的信息非常有帮助,但是很难确定为什么会出现这些信息。

简化此过程的方法是,如果您可以列出正在使用的具有适用于iOS构建的后期处理构建的任何其他插件,并且还可以提供有关其优先级或构建顺序的任何指示。

然后,我在您的错误输出中看到的行号与我们当前的可用软件包中的AdColonyPostProcessBuild.cs文件的当前版本似乎有点不一致。

我首先建议转到此链接,下载当前程序包,然后重新导入AdColonyPostProcessBuild.cs
https://github.com/AdColony/AdColony-Unity-SDK

如果那不能解决问题,则我将打开AdColonyPostProcessBuild.cs文件,并将其优先级更改为较低,最好是运行的最后一个后期处理构建项目。您可以通过将302行上的数字“ 200”更改为很大的数字(例如“ 1000”)来实现。

如果这不能解决您的问题,我将需要更多地了解您的环境配置,例如您正在使用的其他插件,以及与默认AdColonyPostProcessBuild.cs文件所做的差异。

问候!

AdColony支持

关于c# - 在Adcolony中共享违反路径的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25681063/

10-11 00:30