2014-07-09 6 views
3

Nous construisons une application qui utilise le dernier SDK Facebook iOS (3.15) pour iOS 7 sur Xcode 5. Il y a un produit web associé, et nous utilisons 3 environnements pour le déploiement: production, mise en scène et développement. Nous avons une application Facebook distincte pour chacun de ces environnements, qui est bien documentée et fonctionne bien sur le web. Toutefois, le SDK iOS de Facebook nécessite de spécifier FacebookAppID, FacebookDisplayName et URL Schemes dans notre fichier Info.plist. Notre application mobile est également configurée avec les 3 environnements, en utilisant une configuration différente pour chaque environnement. Je n'ai pas réussi à faire en sorte que le SDK Facebook fonctionne correctement avec les valeurs spécifiques à la configuration dans notre fichier Info.plist. Quelqu'un peut-il m'aider dans la bonne direction pour configurer plusieurs environnements d'applications iOS avec plusieurs applications Facebook?Facebook iOS SDK: Plusieurs applications Facebook pour différents environnements

+0

avez-vous résolu ceci? – Esqarrouth

+0

@Esq J'ai récemment fait face au même problème, veuillez vérifier ma réponse ci-dessous – Azat

+0

@Esq Je viens de poster ma réponse en utilisant une stratégie différente de celle d'Azat. Vérifiez ci-dessous, désolé pour le retard et espérons que cela aide. – hunteros

Répondre

1

Vous pouvez ajouter target à votre projet, sélectionnez OS X>Other>External Build System et utiliser /usr/bin/python comme outil de construction. Puis, dans Paramètres de construction, ajoutez le paramètre défini par l'utilisateur FB_APP_ID et définissez les ID de vos applications pour différentes configurations de construction (Debug/Release/etc).

Dans l'onglet Info, dans le champ Arguments entrez les informations suivantes

fbupdate.py $(FB_APP_ID) 

Voici le script fbupdate.py:

# coding: utf-8 
import os 
import sys 

from lxml.etree import tostring, parse 

if __name__ == '__main__': 
    fb_app_id = None 
    new_fb_app_id = sys.argv[1] 

    filename = os.path.join(os.path.dirname(__file__), '..', 'TargetName', 'Info.plist') 

    tree = parse(filename) 

    for el in tree.xpath('//plist/dict/key[text()="FacebookAppID"]'): 
     value_el = el.getnext() 
     fb_app_id = value_el.text 
     value_el.text = new_fb_app_id 
     break 

    for el in tree.xpath('//array/string[text()="fb{fb_app_id}"]'.format(
      fb_app_id=fb_app_id)): 
     el.text = 'fb' + new_fb_app_id 
     break 

    with open(filename, 'w') as f: 
     f.write(tostring(tree, encoding='UTF-8', xml_declaration=True).encode('utf8')) 

    print('FB App ID update done.') 

J'utilise le dossier Scripts dans le dossier racine de mon projet, je spécifiez-le dans le champ Répertoire. Si vous avez un emplacement différent, n'oubliez pas de changer le script pour ouvrir le bon fichier Info.plist. Aussi, vous devrez remplacer TargetName dans le script à votre cible d'origine. Puis, accédez à vos paramètres cible d'origine et dans le Build Phases ajoutez les dépendances cibles à cette nouvelle cible External Build System créée.

Maintenant, ce script python se déroulera avant la construction de votre objectif initial et de mettre le bon Facebook ID App à l'Info.plist et il sera qu'une pièce d'identité dont vous avez besoin dans la configuration de votre version actuelle.

P.S. Vous devrez peut-être exécuter pip install lxml à partir du terminal et/ou installer d'autres dépendances pour que ce script s'exécute sur votre machine

P.P.S. Je sais qu'il peut être trop tard pour la question originale, mais cela peut être utile pour d'autres

3

J'ai utilisé une stratégie différente de celle d'Azat, qui a fonctionné pour iOS 7/8 et Facebook iOS SDK v3.21. Parce que j'avais plusieurs paramètres au-delà de Facebook qui étaient spécifiques à l'environnement, j'ai créé un Singleton générique pour gérer les configurations d'environnement. Voici les étapes:

1. Créer des configurations pour App

Accédez à votre Paramètres du projet, onglet Info, et de créer des configurations pour chaque environnement différent.J'ai personnellement utilisé Development, Staging, Release et Debug (les deux derniers pour l'environnement de production).

2. Expose Nom de la configuration dans Info.plist

Dans le fichier Info.plist de votre application, créez une clé appelée Configuration et définissez la valeur à ${CONFIGURATION}.

3. Construire Singleton à manipuler l'environnement Configuration

Le code complet se trouve dans this gist, mais voici l'essentiel (sans jeu de mots) de celui-ci. Vous allez créer une liste de propriétés supplémentaire Environments.plist avec une clé pour chaque configuration dont la valeur est un dictionnaire contenant tous vos paramètres spécifiques à l'environnement. Ensuite, vous allez construire une classe Environment qui aura une instance singleton à travers laquelle vous pouvez exposer ces paramètres. Essentiellement, vous pouvez appeler [[Environment sharedInstance] facebookAppId] de n'importe où dans votre application que vous avez importé Environment.h, ce que nous ferons à l'étape suivante.

4. choisir Explicitement Facebook et appId Sélectionnez dans votre délégué App

Dans votre méthode de application:didFinishLaunchingWithOptionsAppDelegate.m, les premières lignes doivent lire:

[FBSettings setDefaultAppID:[[Environment sharedInstance] facebookAppId]]; 
[FBSettings setDefaultDisplayName:[[Environment sharedInstance] facebookDisplayName]]; 

5. Ajouter URL Facebook Schémas à Info.plist

Dans votre Info.plist, vous devrez ajouter l'URL Schémas pour chaque application Facebook que vous utilisez pour tous vos environnements. Voir les instructions here, mais au lieu de seulement 1 élément sous URL Schemes, vous aurez 1 pour chaque environnement.

6. Choisissez Configuration dans le schéma

Pour exécuter en utilisant une certaine configuration, modifier votre schéma (⌘+< raccourci sur Mac) et choisissez votre configuration. Pour rendre plus facile de ne pas avoir à éditer chaque fois que je courais, j'ai créé un schéma pour chacun de mes environnements avec la bonne configuration déjà choisie pour Run, Test, Profile et Archive.


Ce dernier a été testé sur iOS 8 et Facebook iOS SDK v3.21, mais j'espère que la stratégie générale ici peut demander à iOS 9 et les versions ultérieures du SDK iOS Facebook. J'espère que cela t'aides!