web-dev-qa-db-fra.com

Impossible d'accéder à la classe à partir d'un framework dynamique personnalisé (Swift)

Mon environnement iOS dynamique de test XYZFramework est constitué d'une seule classe XYZ

Cependant, même après avoir déclaré:

import XYZFramework

Je ne peux pas accéder à cette classe, aucune tentative ne générant l'erreur suivante:

Use of unresolved identifier 'XYZ'

Comment résoudre ce problème?

34
Vatsal Manot

Trouvé la réponse. Je devais préfixer ma déclaration de classe avec le modificateur public. Donc ça:

class XYZ {

}

est devenu:

public class XYZ {

}

Et, comme toujours, le fait de supprimer le dossier ~/Library/Developer/Xcode/DerivedData a résolu les problèmes mineurs.

49
Vatsal Manot

Si la classe de votre framework contenait également des fonctions membres statiques et membres d'instance, vous devez également ajouter des mots clés public supplémentaires. 

// 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")
   }
}

Maintenant, vous pouvez y accéder via votre code Swift ou avec lldb:

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

Cela garantit que les symboles du Framework sont accessibles dans une version Release

0
rustyMagnet