Plantage app sur Iphone ... mais pas sur le simulateur

#1

Bonjour !

J’ai passé la toute première étape de développement d’une application simple (une heure pour votre première app :sweat_smile: avec le changement d’images) et tout est ok sur le simulateur (SE).

J’ai décidé ensuite d’utiliser du vrai hardware, cable USB, … et aucun problème non plus. App transférée, autorisation accordée au développeur inconnu (moi) … sauf qu’après un certain nombre de fois, l’app a commencé à crasher systématiquement. Elle se ferme instantanément après ouverture …

Une idée d’explication de la communauté ?

Merci !!

MARC

#2

Hello,

Tu as rien dans les logs ?
Pour savoir là et pourquoi ça crash.

#3

Salut !

Ca m’arrive aussi qu’après quelques jours, mes apps plantent au démarrage.
Pour y remédier, re-compiles la, et normalement ca devrais fonctionner.

Nicolas.

#4

On dirais un problème de mémoire. Le Simulateur n’est pas un iPhone, mais un super-iPhone avec une mémoire énorme (celle du Mac), une capacité de stockage colossale (toujours celle du Mac) et un processeur ultra-performant (encore et toujours celui du Mac).

Certains problèmes n’apparaissent pas sur le Simulateur à cause de sa grosse capacité mémoire. Je me souviens d’un MOOC français sur la programmation en Swift, avec un exercice que le professeur avait conçu de manière à mettre le phénomène en évidence, un système d’affichage avec beaucoup d’images.

Comme ça, à froid, je dirais que ton application charge des données au démarrage, un bloc de données de petite taille au, qui grossit à chaque utilisation, pour finalement atteindre une taille critique.

Cela semble ne pas se produire sur le simulateur, parce que la limite de saturation mémoire du Mac est beaucoup plus haute qu’un iPhone.

#5

Hello,

Si. Je vois ceci dans la console Iphone à chaque démarrage de la petite app.

erreur 21:45:56.184241 +0200 SpringBoard [be.bmh.ios.MysecondApp] Bootstrap failed with error: <NSError: 0x28268c4e0; domain: BKSProcessErrorDomain; code: 1 (bootstrap-failed); reason: “Failed to start job”>

erreur 21:45:56.184342 +0200 SpringBoard Bootstrapping failed for <FBApplicationProcess: 0x10bde3b90; be.bmh.ios.MysecondApp; pid: -1> with error: Error Domain=BKSProcessErrorDomain Code=1 “Unable to bootstrap process with bundleID be.bmh.ios.MysecondApp” UserInfo={NSLocalizedDescription=Unable to bootstrap process with bundleID be.bmh.ios.MysecondApp, BKSProcessExitReason=0, NSLocalizedFailureReason=Failed to start job, NSUnderlyingError=0x2826868b0 {Error Domain=NSPOSIXErrorDomain Code=3 “No such process” UserInfo={NSLocalizedFailureReason=The process failed to exec, NSLocalizedRecoverySuggestion=Consult /var/log/com.apple.xpc.launchd/launchd.log for more information, NSLocalizedDescription=Unable to get valid task name port right for pid 5415}}, BSErrorCodeDescription=bootstrap-failed}

erreur 21:45:56.200889 +0200 assertiond Unable to obtain a task name port right for pid 5415: (os/kern) failure (0x5)

erreur 21:45:56.200974 +0200 assertiond Failed to start job with error <NSError: 0x102f68b60; domain: NSPOSIXErrorDomain; code: 3; reason: “The process failed to exec”> {

  • description = “Unable to get valid task name port right for pid 5415”;*
  • failureReason = “The process failed to exec”;*
  • recoverySuggestion = “Consult /var/log/com.apple.xpc.launchd/launchd.log for more information”;*
    }

Pas content, il est …

Le code Swift lui même c’est juste ceci, de la toute première leçon app en 1h :sweat_smile::sweat_smile:

// ViewController.swift
// MysecondApp
//
// Created by Marc on 14/06/2019.
// Copyright © 2019 Marc H. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var ImageView: UIImageView!

@IBAction func ChangeImage(_ sender: Any) {
    if
        ImageView.image == #imageLiteral(resourceName: "Photo2") {
        ImageView.image = #imageLiteral(resourceName: "Photo1")
    }
    else
    {
        ImageView.image = #imageLiteral(resourceName: "Photo2")
    }
    
}

Et voilà. Je peux recompiler et tester. Mais le fond du problème m’intéresse aussi (mémoire pas libérée peut-être en effet ? Mais les logs ne parlent pas de cela).

Merci !

MARC

#6

Hello,

Merci pour la suggestion ! Mais … les erreurs consoles ne pointent à première vue pas trop vers un problème mémoire (regarde les messages console que j’ai trouvé dans l’autre réponse)

Merci !

MARC

#7

Est-ce que tu aurais touché par hasard au Provisioning Profile ici ?

#8

Hello,

Non. Il est bien en automatique.

Par contre le problème est peut-être bien de cet ordre :

https://stackoverflow.com/questions/44248925/ios-crash-when-testing-on-device-debug-logs

There’s your problem. Apps signed with Free developer accounts expire after one week, so every week you have to rebuild and resign your app. This issue will go away when you get a paid account, which will allow you to run your non-App Store app for up to a year. – Andy Ibanez May 29 '17 at 20:34

ou bien ici

https://mybyways.com/blog/new-limitations-imposed-on-free-apple-developer-account

Je recompilé, retransféré l’app (j’ai du aussi me réautoriser comme développeur sur mon Iphone) et on verra bien dans 7 jours …

Je vous tiens au courant :sweat_smile:

Merci !

MARC

#9

Si tu n’as pas de compte développeur payant effectivement la piste des 7 jours est la bonne, après la dernière compilation / installation sur iPhone.

#10

Est-ce que tu le relances depuis XCode avec ton iPhone branché ou tu essaies de le relancer directement depuis ton tel comme une app standard ?

#11

Je recompilé, retransféré l’app (j’ai du aussi me réautoriser comme développeur sur mon Iphone) et on verra bien dans 7 jours …

Je vous tiens au courant :sweat_smile:

en effet … Même si de fait je suis à un peu moins de 7 jours. Sais pas comment Apple compte :sweat_smile::sweat_smile:

#12

Est-ce que tu le relances depuis XCode avec ton iPhone branché ou tu essaies de le relancer directement depuis ton tel comme une app standard ?

direct depuis le Téléphone.

#13

Dans ce cas là c’est normal avec un compte gratuit. Le certificat expire très rapidement en mode gratuit. Il te suffit de rebrancher ton iPhone sur ton mac et de relancer l’app une fois via XCode pour renouveler le certificat. Tu devras refaire ça très souvent malheureusement…