web-dev-qa-db-ja.com

内部サイクル;建物は信頼できない結果を生成する可能性があります:Xcode 10エラー

Xcode 10でコンパイルするときに新しいビルドシステムに移行しようとしていますが、次のエラーが発生します。

Cycle details:
→ Target 'project' : LinkStoryboards

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

Target 'project' : ValidateEmbeddedBinary /Users/project/Xcode/DerivedData/project-hgqvaddkhmzxfkaycbicisabeakv/Build/Products/Debug-iphoneos/project.app/PlugIns/stickers.appex

Target 'project' has process command with input '/Users/project/Resources/Info.plist'

Target 'project' has compile command with input '/Users/project/Commons/Components/ScreenshotSharing/ViewController/AppShare.storyboard'

問題のファイルを削除した後でも、別のxib/storyboardでも同じ結果になります。レガシービルドシステムに戻らずにこのエラーを解決するにはどうすればよいですか?

52
Sahil Kapoor

メインターゲットのEmbed App Extensions内のBuild Phasesスクリプトを最後の位置に移動することで、ようやくこれを解決することができました。

10
Sahil Kapoor

Xcode 10ビルドシステムに問題がある場合は、次の手順に従って修正してください。

  1. Xcodeで、「ファイル」->「プロジェクト/ワークスペースの設定」に移動します。
  2. ビルドシステムをレガシービルドシステムに変更します。

新しいXcodeのビルドの問題を解決します。

新しいビルドシステムを使用したい場合は、トラブルシューティングヘルプ このApple Xcodeヘルプページ を参照してください。

45

Cocoapodsでこの問題が発生していました。解決策は、ビルドフォルダーをクリーンアップしてすべてのポッドを再インストールし、アプリを再構築することでした。この方法で問題は解決しました。

30
JAL

「ファイルのコピー」および「ライブラリとバイナリをリンク」ビルドフェーズの前に、「バンドルリソースのコピー」ビルドフェーズを移動することで問題を修正しました。

18
gypsyDev

Xcode 10の新しいビルドシステムは、ビルドの依存関係サイクルを検出し、それらの解決に役立つ診断を提供します。これらの依存サイクルを修正すると、ビルドの信頼性が向上し、正しい製品が一貫して生成されます(サイクルは、派生データを削除する必要がある可能性があります)。また、ビルドのサイクルにより、ビルドグラフ内の何かが各ビルドで常に最新ではなくなり、ビルドするたびにビルドのやり直しが不必要に動作するため、インクリメンタルビルド時間も改善されます。

Xcodeヘルプには、いくつかの一般的なタイプの依存サイクルの解決に関するドキュメントがあります。 https://help.Apple.com/xcode/mac/current/#/dev621201fb

とはいえ、このサイクル診断は少し奇妙に見えます。ビルドフェーズを再配置することで解決できたように思えますが、診断が問題を本当に説明したとは思いません。気にしない場合は、この特定のケースでこの診断を改善することに関するバグレポートをいただければ幸いです。 https://bugreport.Apple.com でファイルを提出できます。関連性があると思われるプロジェクトに関するすべての詳細を含めてください。問題を再現するサンプルプロジェクトは理想的ですが、それを添付できない場合は、プロジェクト構造の診断といくつかのアイデアがまだ役立ちます。

16
Rick Ballard

Cocoapodsでこの問題が発生していましたが、一時的な回避策が見つかりました。

  1. 最新バージョンのcocoapods(1.5.3)をインストールします:Sudo gem update cocoapods
  2. 派生データを削除します:rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. pod install

ソース こちら とXcode 10ベータ4を使用しています。

EDIT:現在Xcode 10.0で引き続き関連しています。

14
gabuchan

ターゲットのSchemeで、ラベルBuildを見つけ、Find Implicit Dependenciesがチェックされていないことを確認します。これらの手順が機能する場合があります。

5
Nh Xu

Swift、Objective-C、CoreData:の混合相互作用で同様の問題がありました:私のプロジェクト(Swiftで記述)では、Core Dataの自動生成Swiftクラスも使用しました。

しかし、ある時点で、コアデータエンティティを参照するパブリックプロパティ(対応するヘッダーで定義)を備えたObjective Cクラスが必要でした。

#import "ProjectName-Swift.h" // this is to import the Swift entities into ObjC

@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

CoreDataモデルを変更するとすぐに、XCodeはクラスを再構築しようとし、示されたサイクルビルドエラーでハングしました。

プロジェクトの順序を変更するコンパイルヘッダーフェーズがなかったため、最初の絶望の後、ソリューションは非常に簡単であることがわかりました。

myObjCClass.hで、共有Swiftヘッダーインポートステートメントを削除し、@classディレクティブで変更しました。

@class MyCoreDataClass; // tell the compiler I will import the class definition somewhere else

// the rest stays the same
@interface myObjCClass : NSObject

@property (nonatomic) MyCoreDataClass*myEntity;

@end

#import "ProjectName-Swift.h"ステートメントをmyObjCClass.mクラス定義ファイルに移動しました。

#import "myObjCClass.h"
#import "ProjectName-Swift.h"

@implementation myObjCClass

@end

そして、それは心配をしませんでした。

5
Lookaji

私は同じ問題に直面していました:以下はエラーでした

ターゲット「Pods-MyAppName」と「RxCocoa」間の依存関係のサイクル。建物は信頼できない結果をもたらす可能性があります。これは通常、ソースのコンパイルの前にターゲットのヘッダービルドフェーズを移動することで解決できます。サイクルパス:Pods-MyAppName→RxCocoa→Pods-MyAppName

以下の手順を使用して解決しました。

1)。 Pods-MyAppNameプロジェクトのターゲットRxCocoaに移動します

2)ビルドフェーズに進む

3)ヘッダーフェーズをドラッグし、Complile Sourcesビルドフェーズの上に移動します。

これで問題が解決しました。それが役に立てば幸い!

5
NoProb

Xcode 10.2.1 /ユニットテストターゲット。ユニットテストのターゲットは、ビルド時間を改善するためにホストターゲットから独立しています。すべての依存関係をFind Implicit Dependencies-Build Settingsで指定しているため、Scheme-BuildオプションのCompile Sourcesのチェックを外して解決します。

1
Jimmy

Version 10.0 beta 3 (10L201y)についても同じ問題があり、New Build Systemが必要でした。

問題が無効になったEnable Modules (C and Objective-C)

Build Settings -> Apple Clang - Language - Modules

有効にした後(YESに設定)、エラーを取り除きました。

1
vauxhall

私の問題は、SwiftブリッジングヘッダーとObjective Cファイル間の周期的な依存関係に関係していました。

Objective Cヘッダーファイルには#import "...-Swift.h"ファイルがあり、いくつかのSwiftファイルにはこれらのファイルをインポートに含めていたため、循環依存関係が発生していました。

これが、私が解決策を見つけるきっかけとなったStackOverflowです。

目的C、Swift循環依存による相互運用性の問題

SwiftブリッジングヘッダーがHopscotch-Swift.h自体をインポートするファイルをインポートする場合の循環参照を防ぐ方法

編集:

上記のファイルをSwiftに変換することで問題を解決しました。

1
Constantine

Core_Data

私は同じ問題とエラーを抱えていましたが、エンティティの「NSManagedObjectサブクラスを作成」したときにこのエラーが発生しました。あなたがあなたのエラーがCore Dataについての私のものと同じであると思うなら、おそらくあなたを助けることができる(そして私を助けた)ことは:

  • 「xcdatamodel」ファイル内のエンティティをクリックします
  • あなたの右バーに行き、Data Model Inspectorをクリックしてください
  • 「モジュール」を「現在の製品モジュール」に変更します
  • 最後に、「Codegen」を「Manual/None」に変更します
  • きれいにして構築する

他のシナリオではXcodeが自動的にファイルを作成し、別のファイルを作成すると競合が発生するためだと思います。

1
Alireza aj

私の解決策は、単にビルドフォルダーをクリーンアップしてから再ビルドすることでした。

1
onemoreanimal

Xcode 10でプロジェクトをアーカイブしようとすると、同様の問題が発生しました。詳細は次のとおりです。

→ Target 'mytarget': CodeSign /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

○ Target 'mytarget': SetMode u+w,go-w,a+rX /path/to/mytarget.app

○ Target 'mytarget': SetGroup staff /path/to/mytarget.app

mytarget -> Build Settings -> Deployment -> Install Owner$(USER)を設定して修正しました

1
likecatfood

Podsターゲット内のビルドフェーズの順序を変更する必要があるようです。私にとっては、ヘッダーを残りの上に移動することはうまくいきました。 Podfileでこれを自動化できます。

require 'xcodeproj'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    headers_phase = target.build_phases.find { |p| p.kind_of?(Xcodeproj::Project::Object::PBXHeadersBuildPhase) }
    if headers_phase
      puts "#{target.name}: Moving Headers build phase to top"
      target.build_phases.insert(0, target.build_phases.delete_at(target.build_phases.index(headers_phase)))
    end
  end
end
1
bcherry

ここでこれを修正できるかもしれません:

ファイル->ワークスペース設定->ビルドシステム:新しいビルドシステム

Workspace Settings

0
SepCode

実際、XcodeのプロンプトThis usually can be resolved by moving the target's Headers build phase before Compile Sourcesに注意を払うだけで、それを実行できます。

この問題が発生すると、Xcodeから次のプロンプトが表示されます。

:-1: Cycle inside XXXX; building could produce unreliable results. This usually can be resolved by moving the target's Headers build phase before Compile Sources.
Cycle details:
→ Target 'XXXX': LinkStoryboards
○ Target 'XXXX: Ditto Path/XXXX-Swift.h /Path/XXXX-Swift.h
○ Target 'XXXX has compile command for Swift source files
○ That command depends on command in Target 'XXXX: script phase “Run Script”

私はただ一つのことをして、問題を完全に解決しました:

Targetを選択し、Build Phaseを選択してRun ScriptCompile Sourcesの前に移動します。

実行、正常にコンパイルされました。

原則は単純で、コンパイル順序を変更するだけです。

image 1

Xcode 10.2&Swift 5

0
ShevaKuilin

このページから試してみましたが、私が助けた唯一のことは、ターゲットのコピーを作成し、コピーの名前を更新し(コピーサフィックスを削除)、古いものを削除し、その後ポッドをインストールしたことです。

0