在Adcolony中分享违规路径

时间:2014-09-05 07:54:42

标签: c# ios unity3d google-play-games adcolony

我已经完成了在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并重新开始构建它。

2 个答案:

答案 0 :(得分:2)

我发现你有几个问题。这听起来像一个无赖。但是,我当然希望提供帮助。

发生了什么:

关于您提供的第一个错误,看起来它在阅读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 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)(在Assets / Editor / AdColonyPostProcessBuild.cs:356)

这让我想到了下一点。

您列出的第二个错误是由另一个名为" XCode Editor for Unity"的替代后期处理构建逻辑引起的。

你可以在这里找到它:

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

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

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

AdColony已将我们的后期处理逻辑配置为最后运行,依赖于在运行XCode Editor For Unity之后解析信息的能力。

建议的解决方案

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

如果您可以列出任何其他已经使用过的应用于iOS版本的后期处理构建的插件,并且您还可以提供有关其优先级或发生顺序的任何指示,那么促进此过程的方法是什么?建立。

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

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

如果这还没有解决问题,我会打开AdColonyPostProcessBuild.cs文件并将其优先级更改为更低,最好是要运行的最后一个后期处理构建项。您可以通过更改数字' 200'来实现此目的。在第302行,对于一个很大的数字,例如' 1000'。

如果这不能解决您的问题,我需要了解您的环境配置,例如您正在使用的其他插件,以及您从默认的AdColonyPostProcessBuild.cs文件中做出的偏差。

问候!

AdColony支持

答案 1 :(得分:1)

这个问题出现在我身上,因为我使用的是Facebook SDK和Adcolony的SDK。 Facebook代码会打开streamReader,在运行Adcolony脚本时会产生错误。更改Assets \ Facebook \ Editor \ iOS \ third_party \ XCodeEditor-for-Unity \ XCProject.cs

中的行

来自(第76-77行):

projectFileInfo = new FileInfo(Path.Combine(this.filePath, "project.pbxproj"));
string contents = projectFileInfo.OpenText().ReadToEnd();

为:

projectFileInfo = new FileInfo(Path.Combine(this.filePath, "project.pbxproj"));
StreamReader sr = projectFileInfo.OpenText();
string contents = sr.ReadToEnd();
sr.Close();

(相信答案:"IOException: Sharing violation on path" on building a Unity project on Mac OS X with Facebook Unity SDK 5.1