J'ai des cadres personnalisés dans mon ensemble d'applications pour webkit, webcore et javascriptcore. J'aimerais que tous les autres cadres dépendent des versions système de WebKit, webcore ou JavaScriptcore pour utiliser mes versions personnalisées également. Par exemple, ma version personnalisée de WebKit charge des cadres système privés qui dépendent de la version système de WebKit. Cela signifie à la fois mon webkit et le système WebKit sont chargés, et généralement un crash se produit peu de temps après. P>
La façon dont je comprends cela devrait être effectuée, est de définir la variable environnementale DYLD_FRAMEWORK_PATH avant la fin de votre appuie sur l'application (la commande de recherche de chargement de charges peut être trouvée ici: http://code.google.com/p/macdependency/wiki/searchPaths ). Vous pouvez définir des variables environnementales dans le code avec Setenv, mais cela ne prendra pas effet pour le processus en cours d'exécution. Je devrais relancer le processus à nouveau pour qu'il prenne effet. Je voudrais éviter cela aussi. P>
Donc, ma question est de savoir quelle est la meilleure façon de définir le dyld_framework_path avant l'exécution de mon ensemble d'applications? Cela doit également fonctionner dans un ensemble d'applications de version. Existe-t-il un moyen d'exécuter un script chaque fois que quelqu'un clique sur mon ensemble d'applications avant que l'exécutable ne commence à courir. Ou existe-t-il d'autres suggestions là-bas? P>
Merci d'avance. P>
4 Réponses :
Je recommanderais environnement.plist code> ou la touche
lsenvironment code> dans le
info.plist code>. Découvrez le lien ci-dessous. P>
L'info.plist ne prend que des chemins absolus et j'ai besoin que le chemin soit à l'intérieur de mon ensemble d'applications, qui peut être déplacé techniquement. Si je le fixe dans mon environnement.Plist est ce global, car si tel est que cela ne serait pas bon, car d'autres applications peuvent utiliser la variable environnementale.
Jeff wolski a la bonne idée en faisant référence directement à la documentation d'Apple sur le sujet. Ce fil fournit également d'excellents conseils sur la façon de faire ça va Dans XCode, y compris les cas de coin associés à des méthodes alternatives de spécification (par exemple, en utilisant Ma raison de votre chiming est votre également em> a demandé un script pouvant pouvoir vous aider (et un fournisseur de primes semble avoir le même problème). Il allume webkit Références Un tel script dans sa documentation , que vous voudrez peut-être choisir En dehors de Le code source WebKit applicable . Cela devrait vous donner des conseils supplémentaires sur la manière dont, au moins en fonction des développeurs, vous devriez le faire correctement. P>
meilleure des chances avec votre (s) projet (s). P> ~ / .bash_profile code> directement pour votre utilisateur). P>
J'ai examiné le script Run-Safari et le script fonctionnerait, mais je ne sais pas comment forcer un script à courir chaque fois que quelqu'un clique sur un ensemble d'applications. J'ai besoin des variables environnementales définies pour la session de l'exécutable à l'intérieur de mon ensemble d'applications.
@Michaelwildermuth Selon Cette question , une pléthore d'options existe . Au moins un d'entre eux répondra à vos besoins, que ce soit via un .Command code> fichier
ou < Un href = "http://stackoverflow.com/a/310183/517815"> L'approche de l'éditeur de script marginalement plus élaboré . Si ceux-ci ne fonctionnent pas pour vous, nous discuterons de certaines options. :)
WebKit a actuellement un script pour le faire pour vous, appelé Run-webkit-App. Voir http://trac.webkit.org/browser/trunk/ Outils / scripts / Run-webkit-app p>
Les versions plus récentes de LD comprennent le drapeau -DYLD_ENV code>, qui insère une commande
lc_dyld_environment code> la commande de chargement dans le binaire (et, comme cela s'applique essentiellement aussi tôt que possible dans l'exécution de l'application) . Peut-être ajouter
-wl, -dycld_env, dyld_framework_path = / dossier / Encendre / webkit / and / cadres / cadres code> sur vos drapeaux de compilateur pourraient faire ce que vous voulez? P>
Qu'entendez-vous par «tous les autres cadres»? Si ce n'est que vos cadres privés, vous ne pouvez pas simplement les construire en liaison à votre webkit privé et à vos cadres connexes?
Bien où dans la montagne de code qui est mon webkit personnalisé, des datadectors.framework est chargé si vous cliquez avec le bouton droit de la souris sur une fenêtre (uniquement sur OSX Lion) et que les fichiers de données sont un cadre de système privé (non construit par moi). Lorsque cela se produit des datadecteurs dépend des versions système de WebKit et JavaScriptcore, alors une fois que cela se produit, il existe maintenant 2 copies de WebKit chargé, les miennes et les systèmes. Cela cause des résultats inattendus et un crash.
Avez-vous déjà réussi à obtenir ce travail? Je cherche à faire quelque chose de similaire et je n'ai pas beaucoup de chance avec aucune des approches suggérées.
J'ai fini par définir par le code des variables environnementales pendant l'exécution, puis lancant une deuxième version de mon processus à partir du premier processus. Le premier processus termine ensuite l'exécution de la 2e exécution du processus d'exécution dans un environnement avec le jeu DYLD_FRAMEWORK_PATH. FYI Parfois, le débogueur avait des problèmes liés au deuxième processus correctement, je devais généralement laisser un point de rupture en main pour attraper le 2e processus.