菜鸟教程小白 发表于 2022-12-11 18:31:04

ios - Cocoapod - 混合 Objective-C 和 Swift 项目中自定义配置的构建错误


                                            <p><p>我在下面的项目设置中为自定义构建配置编译主项目时遇到构建错误。但我没有得到调试配置的构建错误。</p>

<pre><code>MainProject ( Mixed Objective-C and Swift)
|_ SubProject1 ( Only Objective-C)

MainProject build configs :
|_ Debug
|_ Inhouse
|_ Adhoc
|_ Store

SubProject1 build configs:
|_ Debug
|_ Release
</code></pre>

<p>Pod 文件:</p>

<pre><code>workspace &#39;MainProject.xcworkspace&#39;
platform :ios, &#39;9.0&#39;

target &#39;MainProject&#39; do
   use_frameworks!

   def shared_pods
   # all the pods go here
   pod &#39;CocoaLumberjack/Swift&#39;
   end

   target &#39;MainProject&#39; do
   project &#39;MainProject&#39;
   shared_pods
   end

   target &#39;SubProject1&#39; do
   project &#39;Subprojects/SubProject1/Subproject1&#39;
   shared_pods
   end
end
</code></pre>

<p>主项目和子项目都使用 Cocoalumberjack。由于 subproject 是一个 obj-c 项目,所以它使用 cocoalumberjack obj-c 版本,并带有以下 import 语句。</p>

<blockquote>
<p>#import &#34;CocoaLumberjack/CocoaLumberjack.h&#34;</p>
</blockquote>

<p>在构建调试配置时,没有构建失败。但是在构建 Inhouse/Adhoc/Store 配置时,它无法在头搜索路径中找到 cocoalumberjack 头文件。从构建日志中,我可以推断出,</p>

<p>在构建主项目调试配置时,相同的配置用于构建 pod 和子项目。因此,Pod 被放置在 Debug-iphonesimulator 路径中。由于子项目有Debug配置,所以也会引用Debug-iphonesimulator路径下的pod头,所以构建成功。</p>

<p>当 Mainproject 中的其他自定义配置被构建时,比如说,Inhouse,Pods 被放置在 Inhouse-iphonesimulator 路径中。由于子项目没有内部配置,它默认发布配置。这导致在构建子项目时在发布中间路径中搜索 cocoalumberjack 头文件。但是 Cocoalumberjackheader 不存在于发布配置路径中,但存在于内部中间路径中。这会导致构建错误。请在下面找到构建错误日志。</p>

<blockquote>
<p>CompileC
/Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Intermediates/Subproject1.build/Release-iphonesimulator/SubProject1.build/Objects-normal/x86_64/SubProject1.o </p>

<p>/Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Intermediates/Subproject1.build/Release-iphonesimulator/SubProject1.build/SubProject1-generated-files.hmap
-F/Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Products/Release-iphonesimulator</p>

<p><strong>&gt; -F/Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Products/Release-iphonesimulator/CocoaLumberjack</strong>
-iquote /Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Products/Release-iphonesimulator/CocoaLumberjack/CocoaLumberjack.framework/Headers
-c /Users/someusername/Anand/iOS/Practices/StackOverflow/MainProject/Subprojects/SubProject1/SubProject1/SubProject1.m
-o /Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Intermediates/Subproject1.build/Release-iphonesimulator/SubProject1.build/Objects-normal/x86_64/SubProject1.o</p>

<p>In file included from
/Users/someusername/Anand/iOS/Practices/StackOverflow/MainProject/Subprojects/SubProject1/SubProject1/SubProject1.m:10:
/Users/someusername/Anand/iOS/Practices/StackOverflow/MainProject/Subprojects/SubProject1/SubProject1/Logger.h:9:9:
fatal error: &#39;CocoaLumberjack/CocoaLumberjack.h&#39; file not found</p>

<h1>import &#34;CocoaLumberjack/CocoaLumberjack.h&#34;</h1>

<pre><code>    ^ 1 error generated.
</code></pre>
</blockquote>

<p>有人可以帮我解决自定义配置的构建错误吗?如果需要更多详细信息,请告诉我。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这应该可以解决您的问题:</p>

<h1>第一步</h1>

<p>用这个更新你的 Podfile:</p>

<pre><code>workspace &#39;MainProject.xcworkspace&#39;
platform :ios, &#39;9.0&#39;
use_frameworks!

def shared_pods
# all the pods go here
pod &#39;CocoaLumberjack/Swift&#39;
end

target &#39;MainProject&#39; do
project &#39;MainProject&#39;
shared_pods
end

target &#39;SubProject1&#39; do
project &#39;Subprojects/SubProject1/Subproject1&#39;
shared_pods
end
</code></pre>

<h1>第 2 步</h1>

<p>在终端上运行此命令以从项目中卸载 pod 以便稍后进行全新安装:</p>

<pre><code>pod deintegrate
</code></pre>

<h1>第三步</h1>

<p>删除 Podfile.lock</p>

<pre><code>rm -rf Podfile.lock
</code></pre>

<h1>第四步</h1>

<p>再次运行安装:</p>

<pre><code>pod install
</code></pre>

<h1>第 5 步</h1>

<p>如果您使用 Lumberjack 作为框架,您可以像这样导入:</p>

<pre><code>@import CocoaLumberjack
</code></pre>

<p>希望能解决,请告诉我结果...</p>

<h2>注意:</h2>

<p>您也可以尝试<a href="https://github.com/fpillet/NSLogger" rel="noreferrer noopener nofollow">NSLogger</a>也适用于混合的 Objective-c + swift 项目。</p>

<p><strong>还有</strong> <a href="https://github.com/vsouza/awesome-ios#logging" rel="noreferrer noopener nofollow">other alternatives</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Cocoapod - 混合 Objective-C 和 Swift 项目中自定义配置的构建错误,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/45768104/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/45768104/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Cocoapod - 混合 Objective-C 和 Swift 项目中自定义配置的构建错误