2010-01-06 7 views
0

Je crée un projet dans lequel je dois changer le fichier main.m, de sorte que UIApplication ne marche pas apparaître tout de suite, donc je supprimé la ligne suivante de main.mAjout d'un UIWindow dans Xcode iPhone SDK

int retVal = UIApplicationMain(argc, argv, nil, nil); 

et supprimé ces lignes de AppDelegate

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after application launch 
    [window makeKeyAndVisible]; 
} 

et moi avons ajouté quelques lignes de la mienne. Maintenant, UIWindow n'apparaît pas par défaut, et à juste titre. Mais maintenant, après que mon code est exécuté, je veux créer une fenêtre et afficher un message.

Comment créer une UIWindow lorsqu'il n'y a pas de UIApplication dans main.m?

+1

Cela semble être une très mauvaise idée. –

Répondre

4

Si vous voulez lancer une application à partir d'un démon, utilisez SBSLaunchApplicationWithIdentifier.

BOOL SBSLaunchApplicationWithIdentifier(NSString* identifier, 
             BOOL  please_pass_NO_here); 

Si vous souhaitez lancer une URL, utilisez -[UIApplication openURL:] ou le niveau inférieur GSEventSendApplicationOpenURL.

mach_port_t GSGetPurpleSystemEventPort(); 
void GSEventSendApplicationOpenURL(CFURLRef url, mach_port_t port); 

Si vous voulez simplement afficher une alerte, utilisez CFUserNotification. (Oui, il fonctionne sur iPhoneOS.)

http://developer.apple.com/mac/library/documentation/CoreFoundation/Reference/CFUserNotificationRef/Reference/reference.html

+0

Waoo c'est quelque chose de vraiment encourageant. Je vais essayer à coup sûr. Une chose que je veux demander ici est que, en fait, j'ai écrit mon LaunchDaemon comme un script bash qui fonctionne bien si je me connecte simplement un fichier avec une entrée, mais chaque fois que j'essaie d'ouvrir une application en utilisant "/Applications/Appname.app/ AppName ", rien ne se passe. Y at-il de toute façon je peux ouvrir une application en utilisant Bash Script dans iPhoneOS? – raziiq

+0

Vous devez transmettre l'identifiant, par ex. @ "com.yourcompany.appname". – kennytm

+0

Merci pour la réponse. Oui je sais que je dois passer l'identifiant à la classe que tu m'as dit plus tôt, je vais sûrement essayer, mais dans ce cas je demandais s'il y avait de toute façon dans bash Scripting pour ouvrir une application utilisant une commande bash scripting? – raziiq

1

Très probablement, ne pas démarrer UIKit n'est pas la solution que vous recherchez. Essayez de ne montrer aucune interface utilisateur (ne revenez pas de applicationDidFinishLaunching:) et faites ce que vous devez faire là-bas (ou dans quelque chose d'appelé). Ou, vous pourriez simplement montrer un bel écran de chargement avec un UIActivityIndicatorView. Notez également que si votre application n'a pas été entièrement lancée dans les 20 secondes suivant le démarrage (affichant une sorte d'interface utilisateur et répondant aux événements), SpringBoard ou le système d'exploitation quitteront automatiquement votre application. De plus, les utilisateurs n'aiment pas attendre :). Edit: Puisque vous ne faites pas d'application UIKit, arrêtez de rêver de pouvoir démarrer UIKit au milieu: vous ne pouvez pas. Cela nécessite un composant séparé hooking SpringBoard pour accomplir.

+0

Merci pour la réponse. Enfait je crée un LaunchDaemon. Donc, je pensais que si je créais un UIApplication, il faudrait beaucoup de mémoire car il fonctionne en arrière-plan tout le temps, donc j'ai écrit mon propre main.m. Une suggestion pour l'obtenir? – raziiq

+0

Vous ne pouvez pas créer un démon d'arrière-plan en tant qu'application sur iPhone OS. Vous auriez besoin de jailbreaker le téléphone. – Nimrod

+0

Et c'est tout à fait bien avec moi, mais si vous êtes alors vous ne devriez pas faire tout UIKit à tous. –

0

Pourquoi essayez-vous d'ouvrir une fenêtre à partir d'un démon? Cela semble être une très mauvaise idée, et comme vous le remarquez difficilement. Au lieu de cela, créez une application pour faire ce que vous voulez faire et lancez-la à partir du démon lorsque vous voulez afficher une fenêtre - soit via la gestion d'URL ou d'autres moyens. Mais fondamentalement, cette application et votre démon peuvent communiquer une fois qu'elle est opérationnelle, et elle peut faire toutes les choses de l'interface utilisateur loin du domaine du démon.

+0

Ou accrocher SpringBoard. –

+0

Un exemple sur comment accrocher avec springboard? – raziiq

0

i ce que j'accompli en train de faire, grâce à KennyTM pour ses grands conseils.

C'est ce que je l'ai fait

1) j'ai créé mon application dans laquelle je l'ai fait tous les trucs pour mon application, puis écrit tous ces paramètres dans un fichier texte et fait mon application créer et placer ce fichier txt/private/var/mobile/SomeFile.txt (C'est l'endroit où, en tant qu'utilisateur mobile, votre application peut écrire sans déranger avec les autorisations)

2) Ensuite, j'ai créé une autre application dans xcode, (basé sur la fenêtre), supprimé les fichiers de délégué (h/m) et écrit ma propre fonction principale, dans laquelle je lis à partir du fichier mon autre application créer et écrit à la 1ère étape (/private/var/mobile/SomeFile.txt).

3) J'ai créé un plist (Vous pouvez trouver de l'aide sur la création d'un LaunchDaemon ici http://www.tuaw.com/2008/02/21/tuaw-responds-iphone-lojack/)

4) Je fait que plist à lire mon application à l'étape 2 toutes les 60 secondes (1 min) et si la condition est true, l'application de la 2ème étape affichera une alerte en utilisant CFUserNotificationDisplayAlert (merci à KennyTM pour ses conseils). Le seul problème que je rencontre actuellement est que je dois placer ce launchDaemon dans le répertoire/Library/LaunchDaemons manuellement mais SSH en utilisant root, parce que je ne peux pas/mon application ne peut pas écrire dans ce répertoire.