web-dev-qa-db-fra.com

Une application se bloque uniquement lors de la construction de Testflight

J'ai créé une application sur Swift et l'ai testée à l'aide d'appareils iPhone 6, iPhone 6 plus et iPhone 5, ainsi que de tous les simulateurs proposés par Xcode. L'application fonctionne correctement et ne plante pas lorsqu'elle est téléchargée localement. (iOS 8)

J'ai finalement soumis une version pour Testflight. L'application se bloque systématiquement au même endroit après avoir été téléchargée via la version Testflight. 

Existe-t-il un problème connu dans lequel les versions téléchargées s'exécutent différemment des versions créées localement? Et comment puis-je résoudre le problème avec la version Testflight? 

33
loop

J'ai résolu le problème en modifiant l'optimisation du compilateur Swift de fastest à none. Je ne suis pas sûr que ce soit une solution idéale à long terme, mais la construction ne plante plus.

6
loop

Je suppose que c'est un problème de compilateur Swift. Pour vérifier d’abord, allez dans Edit Scheme puis changez la configuration Build en Release mode dans Run tab puis installez la construction localement. Vous saurez où exactement son crash.

56
Chengappa C D

Ce pourrait être le Bitcode question connexe. Vérifiez si toutes vos bibliothèques tierces prennent en charge bitcode, puis réglez uniquement bitcode surYESelse surNO

En réalité, Bitcode est une représentation intermédiaire d'un programme compilé. Les applications que vous téléchargez sur iTunes Connect et contenant un code bitcode seront compilées et liées sur l'App Store. 

3
Dilip

Si quelqu'un d'autre a le même problème, voici ce que ma solution était:

J'ai finalement eu le problème en boucle avec une déclaration if, semblable à ceci -

while(condition)
{
    if (check)
    {
        code!
    }
    //There was no code here
}

Notez qu'il n'y a pas de code à la fin de la boucle (où se trouve le commentaire). Une fois que j'ai ajouté un bit de code aléatoire (dans ce cas, incrémenter une variable pour la sortie), le problème s'est arrêté.

while(condition)
{
    if (check)
    {
        code!
    }
    i += 1;
    output statement
}

Je pense que cela doit être une erreur du compilateur, sinon mon "correctif" ne devrait pas l'être du tout. Mais le voici au cas où cela pourrait aider quelqu'un d'autre!

1
John Szymanski

Dans mon cas, la modification de Legacy Build System en New Build System (pour Xcode 10) résout le problème suivant: la construction de Testflight se comporte différemment. Pourrait être utile à quelqu'un.

1
HuaTham

Au lieu de i += 1; dans les boucles while vides.

Je l'ai fait dans mon vide en boucle Loop: RunLoop.current.run(until: Date(timeIntervalSinceNow: 1)) 

Et maintenant, l'application TestFlight ne bombarde pas!

Une durée plus courte peut également fonctionner, telle que: RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.25)) 

1
Jay

J'ai dû modifier les paramètres dans la construction de l'archive pour prendre une version de débogage afin de résoudre un problème similaire. IOS permet en fait d'envoyer une version de débogage à testflight qui a résolu mon problème pour les tests initiaux. 

Bien que plus tard, j’ai compris que j’avais oublié le fichier de droits de mon application car j’utilisais une extension partagée comme cible dans mon projet.

Je n'ai vu aucune information concernant le débordement de pile avec le problème de droit. J'ai perdu beaucoup de temps. J'espère que cela aidera quelqu'un comme moi à l'avenir.

0
K.S