web-dev-qa-db-ja.com

カスタム動的フレームワーク(Swift)からクラスにアクセスできません

私のテスト動的iOSフレームワークXYZFrameworkは、単一のクラスXYZで構成されています。

ただし、宣言後でも:

import XYZFramework

このクラスにアクセスできず、次のエラーが発生します。

Use of unresolved identifier 'XYZ'

この問題を解決するにはどうすればよいですか?

35
Vatsal Manot

答えが見つかりました。クラス宣言の前にpublic修飾子を付ける必要がありました。したがって、この:

class XYZ {

}

なりました:

public class XYZ {

}

そして、いつものように、~/Library/Developer/Xcode/DerivedDataフォルダは、小さな複雑な問題を修正しました。

52
Vatsal Manot

フレームワークのクラスに静的関数とインスタンスメンバー関数も含まれている場合は、さらにpublicキーワードを追加する必要があります。

// set the Framework class to Public
public class FrameworkHello{  

   // set the initializer to public, otherwise you cannot invoke class
   public init() {  

   }

   // set the function to public, as it defaults to internal
   public static func world() {  
       print("hello from a static method")
   }
}

これで、Swiftコードまたはlldbでこれにアクセスできます:

(lldb) po FrameworkHello.world()
hello from a static method

これにより、フレームワークのシンボルにReleaseビルドでアクセスできるようになります。

0
rustyMagnet