Как предположил Крис Гейрман, проблема заключалась в ошибке JavaScript. Я не уверен, что люди с похожими проблемами найдут эту ветку, но если они это сделают, вот странная ошибка, которая произошла.
Я создал простую ORM-систему с BaseModel и кучей унаследованных от нее моделей. Конструктор BaseModel выглядел так:
constructor(props = {}, relations = {}) {
Object.keys(props).forEach((k) => {
// Save props to object
this[k] = props[k];
});
this.relations = relations;
this.className = this.constructor.name;
}
Эта последняя строка была проблемой. На моем локальном симуляторе, и если я создаю приложение для своего телефона, подключив его, это работает нормально. Например, если модель Message наследуется от BaseModel, вызов var msg = new Message(data, relations); msg.className
возвращает Message
.
Но что-то в связке/архивировании/отправке приложения через TestFlight или Fabric.io минимизирует и искажает JavaScript, так что имена классов меняются. Так что вместо этого, если я сделаю это -- var msg = new Message(data, relations); msg.className
-- я верну случайное имя переменной, что-то вроде 't'.
Это было проблемой в моем приложении, потому что моя домашняя страница содержала оператор switch, который работал с className:
iconContent() {
return {
Message: {
icon: <Image style={styles.feedItemIconImage} source={ require('../assets/img/icon_message.png') } />,
color: c.grass
}, ...
}[this.props.className] // from the model item
}
Но 'Message'
не было, как ожидалось, значение this.props.className
-- 't'
было. Итак, если бы я попытался проникнуть, скажем, в значение color
, я бы столкнулся с ошибкой, потому что пытался получить доступ к свойству color
элемента null
.
Почему это не сообщило, я не знаю (я последовал предложениям Криса и установил Sentry, но он все еще не сообщал об этой ошибке).
Но это то, что происходило. Минификация/ухудшение происходила только, когда я устанавливал приложение на телефон через TestFlight/Fabric, поэтому приложение вылетало только в этих условиях.
Надеюсь, это спасет любого, кто столкнется с подобной ошибкой, от вырывания волос.
person
Sasha
schedule
07.03.2016