6
votes

L'application Ionic plante sur iOS 12.2 à cause de '_alwaysRunsAtForegroundPriority'

Sur iOS 12.2, mon application se termine juste après le démarrage, avec ce message dans xcode:

Arrêt de l'application en raison d'une exception non interceptée 'NSUnknownKeyException', raison: '[setValue: forUndefinedKey:]: cette classe n'est pas compatible avec le codage des valeurs de clé pour la clé _alwaysRunsAtForegroundPriority.

Quelqu'un qui peut m'indiquer la bonne direction pour celui-ci? Je vois qu'il y a eu quelques avertissements à ce sujet plus tôt:

Comment résoudre la validation de l'application" L'application fait référence à des sélecteurs non publics dans Payload / MyApp.app / MyApp: _setAlwaysRunsAtForegroundPriority: "?

La réponse à ce message est qu'il s'agit d'un avertissement de sécurité de la vue Web qui peut être ignoré. Mais quand mon application plante, elle ne peut plus vraiment être ignorée :)

Merci d'avance pour toute aide.

Lars

Mise à jour du 2 février 2019: Il semble que ce soit le mode cordova-plugin-background-mode qui cause l'erreur. Mais je dois admettre que je n'ai aucune idée de comment résoudre ce problème. Cela fonctionne lorsque je supprime ce plugin de mon projet. Mais j'ai besoin de ce plugin, ou du moins de la fonctionnalité du mode d'arrière-plan, donc je dois résoudre ce problème, d'une manière ou d'une autre.

Mise à jour du 5 février 2019: @coderroggie: J'ai aussi la version 2.3.2 du plugin cordova-plugin-ionic-webview. C'est étrange que cela ne fonctionne pour moi que lors de la suppression du mode cordova-plugin-background-mode (version 0.7.2)

Je publierai mes informations ioniques, si cela peut vous fournir des informations utiles.

Ionique:

ionique (Ionic CLI): 4.9.0 (/ usr / local / lib / node_modules / ionic)
Framework Ionic: ionique-angulaire 3.9.2 @ ionic / app-scripts: 3.2.1

Cordova:

cordova (CLI Cordova): 8.1.2 (cordova-lib@8.1.1) Cordova Plates-formes: Plugins Cordova pour ios 4.5.5: cordova-plugin-ionic 5.2.9, cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 2.3.2, (et 22 autres plugins)

Système:

ios-deploy: 1.9.2 NodeJS: v8.11.1 (/ usr / local / bin / node)
npm: 6.4.1 OS: macOS Mojave Xcode: Xcode 10.1 Construire la version 10B61

Mettre à jour le 2 février (à nouveau)

Mes plugins:

cordova-android-firebase-gradle-release 1.0.2 "cordova-android-firebase-gradle-release"
cordova-android-play-services-gradle-release 1.4.3 "cordova-android-play-services-gradle-release"
cordova-android-support-gradle-release 1.4.4 "cordova-android-support-gradle-release"
cordova-plugin-app-version 0.1.9 "AppVersion"
cordova-plugin-background-mode 0.7.2 "BackgroundMode"
cordova-plugin-badge 0.8.7 "Badge"
cordova-plugin-camera 4.0.3 "Caméra"
cordova-plugin-console 1.1.0 "Console"
cordova-plugin-customurlscheme 4.3.0 "Schéma d'URL personnalisé"
cordova-plugin-device 2.0.2 "Appareil"
cordova-plugin-file 6.0.1 "Fichier"
cordova-plugin-file-transfer 1.7.1 "Transfert de fichiers"
cordova-plugin-geolocation 4.0.1 "Géolocalisation"
cordova-plugin-ionic 5.2.9 "cordova-plugin-ionic"
cordova-plugin-ionic-keyboard 2.1.3 "cordova-plugin-ionic-keyboard"
cordova-plugin-ionic-webview 2.3.2 "cordova-plugin-ionic-webview"
cordova-plugin-local-notification 0.9.0-beta.2 "LocalNotification"
cordova-plugin-mauron85-background-geolocation 3.0.0-alpha.49 "CDVBackgroundGeolocation"
cordova-plugin-network-information 2.0.1 "Informations sur le réseau"
cordova-plugin-safariviewcontroller 1.5.4 "SafariViewController"
cordova-plugin-splashscreen 5.0.2 "Splashscreen"
cordova-plugin-vibration 3.1.0 "Vibration"
cordova-plugin-whitelist 1.3.3 "Liste blanche"
cordova-support-google-services 1.1.0 "cordova-support-google-services"
cordova.plugins.diagnostic 4.0.7 "Diagnostic"
ionic-plugin-keyboard 2.2.1 "Clavier"
phonegap-plugin-push 2.1.3 "PushPlugin"


0 commentaires

6 Réponses :


2
votes

J'ai eu un problème similaire avec notre application ionic 3 qui plantait au démarrage avec la version bêta d'iOS 12.2. J'ai aussi la dernière version de cordova-plugin-background-mode.

J'ai résolu mon problème en passant à version 2.3 .2 du plug-in cordova-plugin-ionic-webview.

Essayez ça. Si cela ne résout pas le problème, veuillez publier vos plugins et versions afin que je puisse comparer.

Mise à jour du 5 février 2019
J'ai foiré en répondant plus tôt. J'utilise actuellement cordova-plugin-better-background-mode@0.7 .5 qui est un fork de cordova-plugin-background-mode@0.7.2 .

Essayez de passer à celui-là. Si cela ne fonctionne pas, je publierai le reste des différences que nous pourrions avoir.


9 commentaires

J'ai essayé cela, mais j'obtiens toujours la même erreur. Merci quand même :)


Pour une raison quelconque, le mode cordova-plugin-better-background-mode apparaît comme cordova-plugin-background-mode lors de l'exécution du plugin ionic cordova ls


@larschla - Oui, c'est vrai. Je ne pense pas que ce soit un plugin de bonne foi, plutôt un correctif / une solution de contournement pour certains problèmes avec l'autre plugin qui n'a pas été mis à jour depuis un moment. En outre, je vois maintenant la même erreur que vous voyez "(NSKeyValueCoding) setValue: forKey:]" et j'essaye de déboguer. Je ne sais pas ce que j'avais configuré différemment pour lui permettre de construire et de fonctionner ...


Oh joie;) Alors ce n'est pas que moi. Si j'avais un indice sur l'édition de plugins, je pourrais probablement le réparer. Malheureusement, non.


Cela semble pertinent. Pas très utile. github.com/ionic-team/cordova-plugin-ionic- webview / issues / 28‌ 6


Ouais. J'ai vu celui-là aussi, mais cela ne m'a pas mené très loin. Quoi qu'il en soit - l'heure du coucher ici en Norvège maintenant. Je devrai me pencher davantage sur cela demain. Merci jusqu'à présent, en tout cas :)


Celui-ci semble être sur quelque chose. github.com/ionic-team/cordova- plugin-ionic-webview / issues /… J'ai essayé cela, mais pour une raison quelconque, j'obtiens toujours la même erreur. J'ai supprimé le projet iOS et l'ai ajouté à nouveau, et j'ai effectué une recherche de code complète pour la chaîne _alwaysRunsAtForegroundPriority, sans en trouver - toujours xcode me dit: `` cette classe n'est pas compatible avec le codage de la valeur de clé pour la clé _alwaysRunsAtForegroundPriority. '' Je ne comprends pas d'où ça vient. Souhaitez-vous essayer de faire comme suggéré dans le lien mentionné et voir si cela fonctionne pour vous?


Essayé et échoué avec les mêmes résultats. Je pense que je suis un peu au-dessus de ma tête sur celui-ci.


Ouais. Nous avons décidé de supprimer le plugin en mode arrière-plan et d'implémenter les fonctionnalités nécessaires d'une manière différente. Merci, cependant - d'avoir essayé. SI je ou une raison quelconque devrait trouver une solution à cela, je vous le ferai savoir ici. Merci!



5
votes

Dans le plugin, il y a un 'setValue' vers le bas qui détruit l'application. Vous avez une version pour 12.2. Essayez

    <plugin name="cordova-plugin-background-mode" spec="git+https://github.com/iowayankee/cordova-plugin-background-mode.git" />

package.json

    "cordova-plugin-background-mode": "git+https://github.com/iowayankee/cordova-plugin-background-mode.git",

config.xml

ionic cordova plugin add https://github.com/iowayankee/cordova-plugin-background-mode.git

J'espère que cela aide au moins quelqu'un lance la compilation


5 commentaires

ou supprimez simplement la ligne [obj setValue: [NSNumber numberWithBool: YES forKey [APPBackgroundMode wkProperty]]; dans APPBackgroundMode.m avec le plugin existant


il a obtenu erro après l'installation de la commande ci-dessus: échec de la récupération du plugin github.com/iowayankee/ cordova-plugin-background-mode.git via le registre. C'est probablement un problème de connexion ou la spécification du plugin est incorrecte.


@larschla, vous devriez vraiment essayer le fork d'iowayankee comme lié ici .. J'ai parcouru environ 6 forks différents de cordova-plugin-background-mode et c'est le seul sur lequel j'ai travaillé sur les deux iOS 12.3 et Android 8.1. :)


Rien n'a changé


Je vous remercie. Cela résout le problème pour moi.



3
votes

Essayez ceci. Téléchargez le plugin cordova-plugin-background-mode ou cordova-plugin-better-background-mode dans votre dossier local, attachez-le au projet en tant que plugin local. Allez dans le fichier du plugin src \ ios \ APPBackgroundMode.m et remplacez les lignes suivantes

+ (NSString*) wkProperty
{
    NSString* str = @"YWx3YXlzUnVuc0F0Rm9yZWdyb3VuZFByaW9yaXR5";
    NSData* data  = [[NSData alloc] initWithBase64EncodedString:str options:0];

    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

par

+ (NSString*) wkProperty
{
    NSString* str = @"X2Fsd2F5c1J1bnNBdEZvcmVncm91bmRQcmlvcml0eQ==";
    NSData* data  = [[NSData alloc] initWithBase64EncodedString:str options:0];

    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}


2 commentaires

Je ne pense pas que ce soit une bonne solution si l'intention est de publier sur l'App Store. Il semble que ce soit juste un moyen de cacher qu'il utilise une API privée, et une API qui a peut-être changé de nom (car c'est une API privée et Apple les modifiera sans se soucier de la compatibilité descendante).


Cette méthode est un hack total! Ce n'est pas une surprise, ça a cessé de fonctionner



0
votes

Je pense que votre problème fondamental est que vous exécutez dans un WKWebView, qui n'est pas autorisé à fonctionner en arrière-plan de manière fiable. Je suis confronté à un problème similaire et je crains que la meilleure solution à court terme que je pourrais trouver était d'utiliser UIWebView. UIWebView n'est pas une bonne solution à long terme car il est désormais marqué comme obsolète. Il semble que vous n'utilisez pas encore Ionic 4, ce qui est vraiment bien dans ce cas. Je pense que vous pouvez supprimer les 2 plugins ioniques, utilisez cordova@6.5.0 et cordova engine ios 4.5.4. Avec un peu de chance, alors, lors de l'exécution dans Xcode, tout fonctionnera et vous verrez un message vers le début sur "Utiliser UIWebView". Ce problème fait partie des preuves que j'ai trouvé que WKWebView ne devrait pas fonctionner en arrière-plan: https://issues.apache.org/jira/browse/CB-10657 https://issues.apache.org/jira/browse/CB-11561


0 commentaires

1
votes

Pour trouver lequel des plugins que vous utilisez est à l'origine de l'erreur, exécutez:

cd %HOME%/src/myProject    
grep -r "_alwaysRunsAtForegroundPriority" node_modules

Une fois que vous l'avez trouvé, recherchez une mise à jour qui résout le problème ou remplacez-la par un autre plugin.

/ p>

Dans notre cas, le plugin était WKWebView. Une recherche rapide sur Google a trouvé ils avaient une erreur et l'ont corrigée . Nous avons mis à jour le plugin et cela a fonctionné sans problème.


0 commentaires

-1
votes

Cela m'a aidé: "L'interface principale des informations de déploiement doit être vide" source: https://forum.ionicframework.com/t/app-crashes-when-i-try-to-open-in-it-on-tesflight-on-a-iphone/21005/ 3


0 commentaires