Lorsque je veux utiliser des cadres dans iOS
comme CoreLocation
suis-je censé les lier à Linked Frameworks and Libraries
? Je sais que c'est écrit dans la documentation pour CoreLocation par exemple, mais pourquoi cela fonctionne-t-il bien sans ajouter ces frameworks alors ? Idem pour UIKit
par exemple. Pourquoi cela fonctionne-t-il sans lien, et est-il préférable de les lier ou non ?
Réponse
Trop de publicités?Lors de l'établissement de liens, une application doit toujours connaître tous les cadres et bibliothèques qu'elle utilise lorsque ses symboles sont référencés directement à partir du code objet.
Comme toute application iOS utile nécessite UIKit, ce dernier est toujours implicitement lié. Il s'agit d'une préférence dans Xcode, que vous ne pouvez probablement pas changer. Il existe de nombreuses autres bibliothèques (par ex. libc
, libm
, libSystem
) et certains cadres (par ex. Foundation.framework
, QuartzCore.framework
) qui sont aussi implicitement liés. Certaines bibliothèques et certains frameworks sont indirectement liés, par exemple Foundation inclut libSystem
y libobjc
.
L'éditeur de liens doit connaître toutes ces bibliothèques et frameworks. Ainsi, Xcode crée un fichier nommé <Project>_dependency_info.dat
(par exemple TestApp_dependency_info.dat
) situé quelque part dans le dossier de construction. Ce fichier contient toutes les bibliothèques et tous les frameworks qui sont liés explicitement et implicitement. Même pour un petit projet Hello World en Swift, ce fichier a déjà une taille de 20kb.
Mais toutes les applications n'utilisent pas Core Location, MapKit, WebKit, etc. ou des bibliothèques telles que libz
et chaque cadre et bibliothèque supplémentaire ralentit la phase de liaison. Et bien sûr, Apple ne peut pas connaître tous les frameworks et bibliothèques (personnalisés) que vous souhaitez inclure dans vos projets. Vous devez donc ajouter ces bibliothèques explicitement en les ajoutant à Cadres et bibliothèques liés .
Ce mécanisme d'intégration automatique des cadres nécessaires et manuelle des cadres optionnels est en fin de compte une approche très pragmatique.