2017-05-14 3 views
0

Je suis en train d'utiliser _CDBatterySaver pour allumer en mode de faible puissance utilisant simplementComment importer un cadre privé dans Xcode 8.3 sans obtenir « des symboles non définis pour l'architecture arm64 »

[[_CDBatterySaver batterySaver] setMode:1]; 

Je sais qu'il n'y a pas la même type de répertoire comme Xcode précédent afin que ces méthodes ne fonctionnent pas.

J'ai également essayé d'importer le fichier ".h" mais cela ne fonctionne pas.

Il fait partie du cadre CoreDuet (téléchargé à partir de GitHub)

Merci de

Répondre

1

Vous aurez besoin d'un fichier .tbd pour lier contre.

Apple a arrêté de fournir ces derniers pour les cadres privés commençant par le SDK iOS 9.3, mais vous pouvez les générer vous-même avec un peu d'effort:

  1. Obtenez un IPSW pour une version plus récente iOS (ipsw.me ou the iPhone wiki ont beau listes).
  2. Décompressez l'IPSW et montez le système de fichiers racine (le .dmg qui est plusieurs Go).
  3. Recherchez le cache de bibliothèque partagée pour votre architecture dans /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm*.
  4. En utilisant one of various tools (je préfère jtool), extraire CoreDuet de celui-ci, avec par exemple:

    jtool -e CoreDuet /path/to/dyld_shared_cache 
    
  5. Facultatif: étape 4 pour plusieurs architectures, puis combiner les fichiers extraits à un binaire gras:

    lipo -output CoreDuet dyld_shared_cache_*.CoreDuet 
    
  6. en utilisant soit machotbd ou mon propre outil, tbdumpnotes, créez un fichier .tbd de la bibliothèque/cadre que vous venez d'extraire, par exemple .:

    tbdump CoreDuet > CoreDuet.tbd 
    

    notes 1. Je l'ai écrit, donc je suis évidemment affilié.
            2. Il est une version bêta, et il est actuellement un peu trop zélés avec des symboles, l'impression même
                ceux qu'il ne doit pas - mais jusqu'à présent, il a toujours bien fonctionné pour moi .

  7. Créer une structure de dossiers comme ceci:

    some_path/ 
        CoreDuet.framework/ 
         CoreDuet.tbd 
    
  8. Soit ajouter CoreDuet.framework à vos cadres dans XCode, ou utiliser ces drapeaux du compilateur:

    -Fsome_path -framework CoreDuet 
    
  9. Profit.

En outre, si les étapes 1-6 sont trop gênant pour vous et vous devez simplement le symbole _CDBatterySaver, alors vous pouvez simplement l'utiliser pour votre CoreDuet.tbd et faire avec elle:

--- 
archs:   [ armv7, armv7s, arm64 ] 
platform:  ios 
install-name: /System/Library/PrivateFrameworks/CoreDuet.framework/CoreDuet 
exports: 
    - archs:   [ armv7, armv7s, arm64 ] 
    objc-classes: [ __CDBatterySaver ] 
... 
0

Based sur Siguza réponse

Les versions plus récentes de Xcode utilise le format tbd v2. Voici un fichier stub .tbd qui sera compilé avec la dernière version de Xcode.

--- !tapi-tbd-v2 
archs:   [ armv7, armv7s, arm64 ] 
uuids:   [ 'armv7: CBD84526-2D11-4CF3-83A7-4408DA532D3E', 'armv7s: 37ACF720-FA66-4B2D-8411-09D0B607E1A0', 
        'arm64: 19F91B79-9FA2-4944-9E68-3E632C938AE3' ] 
platform:  ios 
install-name: /System/Library/PrivateFrameworks/CoreDuet.framework/CoreDuet 
objc-constraint: none 
exports: 
    - archs:   [ armv7, armv7s, arm64 ] 
    objc-classes: [ __CDBatterySaver ] 
    objc-ivars:  [ __CDBatterySaver._connection ] 
...