Нативное приложение React работает в режиме отладки, но не работает в режиме выпуска на iOS ⇐ IOS
Нативное приложение React работает в режиме отладки, но не работает в режиме выпуска на iOS
У меня есть приложение на платформе React Native. Режим отладки работает на iOS. Но режим Release не работает. Я попробовал изменить уровень оптимизации, но не помогло. Проблема в том, что я не вижу ошибок. Просто не работает какой-то функционал. И я не могу отладить релизную версию приложения. Как решить эту проблему?
В качестве последнего изменения мы добавили следующую сагу: когда мы удалим вызов этой саги, она работает
import { select, take, takeLatest, call, put, fork, Race } из 'redux-saga/effects'; импортировать R из «ramda»; импортировать V из «o-валидатора»; импортировать * как actionCreators из './actions'; импортировать {redirectTo, showModalError, showModal, showOtp, closeOtp, errorOtp, loader, keychainSet } из '../../../actions/app-actions'; импортировать {storeSession,refreSession} из '../../../actions/session-actions'; импортируйте I18n из «реакции-native-i18n»; Импортировать { KEYCHAIN_RESET, KEYCHAIN_GET, KEYCHAIN_RESULT } из '../../../константы/типы действий'; импортировать { validatePassword, createCustomError, serverError } из '../../../services/utils'; const задержка = (мс) => новое обещание (решение => setTimeout (разрешить, мс)) функция экспорта * ChangePasswordWatcher(api, action) { выходная вилка (ChangePasswordFormWatcher, API, действие); } функция экспорта * ChangePasswordFormWatcher(api, action){ в то время как (истина) { гонка доходности({ ChangePasswordProcess: вызов (ChangePasswordStart, API), отменить: принять(['CHANGE_PASSWORD_PASSWORD_RESET']) }); //выход put(loader('hide')); выход put(loader('скрыть')); } } /** * Изменить пароль Саги стартер * * @param {function} api — объект API * @param {object} action - действие от отправки * @returns */ функция экспорта * ChangePasswordStart(api, action) { пытаться { в то время как (истина) { const { formData } = выход take('CHANGE_PASSWORD_FORM_SUBMIT'); пусть oldPassword = formData.oldPassword; пусть newPassword = formData.newPassword; пусть newPasswordConfirmation = formData.newPasswordConfirmation; доходность пут({ введите: 'CHANGE_PASSWORD_FORM_VALID' }); const validate = validateForm('changePasswordForm', formData); если (validate.valid) { выход put( actionCreators.submitChangePasswordFormValid() ); выход put(loader('показать')); пусть newPasswordResponse = выходной вызов (api.setChangePassword, oldPassword, newPassword); выход put(loader('скрыть')); если ( !newPasswordResponse.ok ) { пусть ошибки = serverError(newPasswordResponse); console.log(ошибки); console.log('ошибки newPasswordResponse'); выход put( showModalError({ошибка: ошибки })); выход put (actionCreators.submitNewPasswordFormFailed (ошибки)); // возвращаем ложь; } еще { доходность пут({ тип: KEYCHAIN_GET, // РезультатДействие: '' }); константная цепочка для ключей = доходность (KEYCHAIN_RESULT); // Сохранить в связку ключей выход put( keychainSet({ вход: keychain.login || ЛОЖЬ, пароль: keychain.password || ЛОЖЬ }) ); // последний экран выход put(redirectTo('спасибо')); вызов выхода (задержка, 300); выход put( actionCreators.changePasswordResetState() ); } } еще { выход put (showModalError ({ ошибка: validate.errors })); выход put (actionCreators.submitChangePasswordFormFailed (validate.errors)); выход put( actionCreators.changePasswordFailed() ); // выход put( actionCreators.submitFinFormFailed( ret.errors ) ); // выход put( actionCreators.registrationFailed()); } // Сброс логина // вызов выхода (задержка, 300); // выход put( actionCreators.resetState() ); } } поймать (е) { console.log(е); } } функция экспорта validateForm(formKey, formData) { позволять врет = { действительный: правда, ошибки: ложь }, схема: {}; переключатель (formKey) { случай 'changePasswordForm': схема = { oldPassword: V.required(validatePassword), новыйпароль: V.required(validatePassword), newPasswordConfirmation: V.required( R.equals( formData.newPassword )) }; перерыв; по умолчанию: перерыв; } ret.valid = V.validate(схема, formData); если (!ret.valid) { ret.errors = V.getErrors(схема, formData); ret.errors = R.zipObj( R.pluck('свойство', ret.errors), ret.errors ); } console.log('isValid: ' + ret.valid.toString()); вернуть возврат; } Чтобы прокомментировать все операторы Console.log, это не помогло
import { select, take, takeLatest, call, put, fork, Race } из 'redux-saga/effects'; импортировать R из «ramda»; импортировать V из «o-валидатора»; импортировать * как actionCreators из './actions'; импортировать {redirectTo, showModalError, showModal, showOtp, closeOtp, errorOtp, loader, keychainSet } из '../../../actions/app-actions'; импортировать {storeSession,refreSession} из '../../../actions/session-actions'; импортируйте I18n из «реакции-native-i18n»; Импортировать { KEYCHAIN_RESET, KEYCHAIN_GET, KEYCHAIN_RESULT } из '../../../константы/типы действий'; импортировать { validatePassword, createCustomError, serverError } из '../../../services/utils'; const задержка = (мс) => новое обещание (решение => setTimeout (разрешить, мс)) функция экспорта *changePasswordScreenWatcher(api, action) { выходная вилка (ChangePasswordFormWatcher, API, действие); } функция экспорта * ChangePasswordFormWatcher(api, action){ в то время как (истина) { гонка доходности({ ChangePasswordProcess: вызов (ChangePasswordStart, API), отменить: принять(['CHANGE_PASSWORD_PASSWORD_RESET']) }); //выход put(loader('hide')); выход put(loader('скрыть')); } } /** * Изменить пароль Саги стартер * * @param {function} api — объект API * @param {object} action - действие от отправки * @returns */ функция экспорта * ChangePasswordStart(api, action) { пытаться { в то время как (истина) { const { formData } = выход take('CHANGE_PASSWORD_FORM_SUBMIT'); пусть oldPassword = formData.oldPassword; пусть newPassword = formData.newPassword; пусть newPasswordConfirmation = formData.newPasswordConfirmation; доходность пут({ введите: 'CHANGE_PASSWORD_FORM_VALID' }); const validate = validateForm('changePasswordForm', formData); если (validate.valid) { выход put( actionCreators.submitChangePasswordFormValid() ); выход put(loader('показать')); пусть newPasswordResponse = выходной вызов (api.setChangePassword, oldPassword, newPassword); выход put(loader('скрыть')); если ( !newPasswordResponse.ok ) { пусть ошибки = serverError(newPasswordResponse); //console.log(ошибки); //console.log('ошибки newPasswordResponse'); выход put( showModalError({ошибка: ошибки })); выход put (actionCreators.submitNewPasswordFormFailed (ошибки)); // возвращаем ложь; } еще { доходность пут({ тип: KEYCHAIN_GET, // РезультатДействие: '' }); константная цепочка для ключей = доходность (KEYCHAIN_RESULT); // Сохранить в связку ключей выход put( keychainSet({ вход: keychain.login || ЛОЖЬ, пароль: keychain.password || ЛОЖЬ }) ); // последний экран выход put(redirectTo('спасибо')); вызов выхода (задержка, 300); выход put( actionCreators.changePasswordResetState() ); } } еще { выход put (showModalError ({ ошибка: validate.errors })); выход put (actionCreators.submitChangePasswordFormFailed (validate.errors)); выход put( actionCreators.changePasswordFailed() ); // выход put( actionCreators.submitFinFormFailed( ret.errors ) ); // выход put( actionCreators.registrationFailed()); } // Сброс логина // вызов выхода (задержка, 300); // выход put( actionCreators.resetState() ); } } поймать (е) { //console.log(e); } } функция экспорта validateForm(formKey, formData) { пусть Рет = { действительный: правда, ошибки: ложь }; переключатель (formKey) { случай 'changePasswordForm': схема = { oldPassword: V.required(validatePassword), новыйпароль: V.required(validatePassword), newPasswordConfirmation: V.required( R.equals( formData.newPassword )) }; перерыв; по умолчанию: перерыв; } ret.valid = V.validate(схема, formData); если (!ret.valid) { ret.errors = V.getErrors(схема, formData); ret.errors = R.zipObj( R.pluck('свойство', ret.errors), ret.errors ); } //console.log('isValid: ' + ret.valid.toString()); вернуть возврат; }
У меня есть приложение на платформе React Native. Режим отладки работает на iOS. Но режим Release не работает. Я попробовал изменить уровень оптимизации, но не помогло. Проблема в том, что я не вижу ошибок. Просто не работает какой-то функционал. И я не могу отладить релизную версию приложения. Как решить эту проблему?
В качестве последнего изменения мы добавили следующую сагу: когда мы удалим вызов этой саги, она работает
import { select, take, takeLatest, call, put, fork, Race } из 'redux-saga/effects'; импортировать R из «ramda»; импортировать V из «o-валидатора»; импортировать * как actionCreators из './actions'; импортировать {redirectTo, showModalError, showModal, showOtp, closeOtp, errorOtp, loader, keychainSet } из '../../../actions/app-actions'; импортировать {storeSession,refreSession} из '../../../actions/session-actions'; импортируйте I18n из «реакции-native-i18n»; Импортировать { KEYCHAIN_RESET, KEYCHAIN_GET, KEYCHAIN_RESULT } из '../../../константы/типы действий'; импортировать { validatePassword, createCustomError, serverError } из '../../../services/utils'; const задержка = (мс) => новое обещание (решение => setTimeout (разрешить, мс)) функция экспорта * ChangePasswordWatcher(api, action) { выходная вилка (ChangePasswordFormWatcher, API, действие); } функция экспорта * ChangePasswordFormWatcher(api, action){ в то время как (истина) { гонка доходности({ ChangePasswordProcess: вызов (ChangePasswordStart, API), отменить: принять(['CHANGE_PASSWORD_PASSWORD_RESET']) }); //выход put(loader('hide')); выход put(loader('скрыть')); } } /** * Изменить пароль Саги стартер * * @param {function} api — объект API * @param {object} action - действие от отправки * @returns */ функция экспорта * ChangePasswordStart(api, action) { пытаться { в то время как (истина) { const { formData } = выход take('CHANGE_PASSWORD_FORM_SUBMIT'); пусть oldPassword = formData.oldPassword; пусть newPassword = formData.newPassword; пусть newPasswordConfirmation = formData.newPasswordConfirmation; доходность пут({ введите: 'CHANGE_PASSWORD_FORM_VALID' }); const validate = validateForm('changePasswordForm', formData); если (validate.valid) { выход put( actionCreators.submitChangePasswordFormValid() ); выход put(loader('показать')); пусть newPasswordResponse = выходной вызов (api.setChangePassword, oldPassword, newPassword); выход put(loader('скрыть')); если ( !newPasswordResponse.ok ) { пусть ошибки = serverError(newPasswordResponse); console.log(ошибки); console.log('ошибки newPasswordResponse'); выход put( showModalError({ошибка: ошибки })); выход put (actionCreators.submitNewPasswordFormFailed (ошибки)); // возвращаем ложь; } еще { доходность пут({ тип: KEYCHAIN_GET, // РезультатДействие: '' }); константная цепочка для ключей = доходность (KEYCHAIN_RESULT); // Сохранить в связку ключей выход put( keychainSet({ вход: keychain.login || ЛОЖЬ, пароль: keychain.password || ЛОЖЬ }) ); // последний экран выход put(redirectTo('спасибо')); вызов выхода (задержка, 300); выход put( actionCreators.changePasswordResetState() ); } } еще { выход put (showModalError ({ ошибка: validate.errors })); выход put (actionCreators.submitChangePasswordFormFailed (validate.errors)); выход put( actionCreators.changePasswordFailed() ); // выход put( actionCreators.submitFinFormFailed( ret.errors ) ); // выход put( actionCreators.registrationFailed()); } // Сброс логина // вызов выхода (задержка, 300); // выход put( actionCreators.resetState() ); } } поймать (е) { console.log(е); } } функция экспорта validateForm(formKey, formData) { позволять врет = { действительный: правда, ошибки: ложь }, схема: {}; переключатель (formKey) { случай 'changePasswordForm': схема = { oldPassword: V.required(validatePassword), новыйпароль: V.required(validatePassword), newPasswordConfirmation: V.required( R.equals( formData.newPassword )) }; перерыв; по умолчанию: перерыв; } ret.valid = V.validate(схема, formData); если (!ret.valid) { ret.errors = V.getErrors(схема, formData); ret.errors = R.zipObj( R.pluck('свойство', ret.errors), ret.errors ); } console.log('isValid: ' + ret.valid.toString()); вернуть возврат; } Чтобы прокомментировать все операторы Console.log, это не помогло
import { select, take, takeLatest, call, put, fork, Race } из 'redux-saga/effects'; импортировать R из «ramda»; импортировать V из «o-валидатора»; импортировать * как actionCreators из './actions'; импортировать {redirectTo, showModalError, showModal, showOtp, closeOtp, errorOtp, loader, keychainSet } из '../../../actions/app-actions'; импортировать {storeSession,refreSession} из '../../../actions/session-actions'; импортируйте I18n из «реакции-native-i18n»; Импортировать { KEYCHAIN_RESET, KEYCHAIN_GET, KEYCHAIN_RESULT } из '../../../константы/типы действий'; импортировать { validatePassword, createCustomError, serverError } из '../../../services/utils'; const задержка = (мс) => новое обещание (решение => setTimeout (разрешить, мс)) функция экспорта *changePasswordScreenWatcher(api, action) { выходная вилка (ChangePasswordFormWatcher, API, действие); } функция экспорта * ChangePasswordFormWatcher(api, action){ в то время как (истина) { гонка доходности({ ChangePasswordProcess: вызов (ChangePasswordStart, API), отменить: принять(['CHANGE_PASSWORD_PASSWORD_RESET']) }); //выход put(loader('hide')); выход put(loader('скрыть')); } } /** * Изменить пароль Саги стартер * * @param {function} api — объект API * @param {object} action - действие от отправки * @returns */ функция экспорта * ChangePasswordStart(api, action) { пытаться { в то время как (истина) { const { formData } = выход take('CHANGE_PASSWORD_FORM_SUBMIT'); пусть oldPassword = formData.oldPassword; пусть newPassword = formData.newPassword; пусть newPasswordConfirmation = formData.newPasswordConfirmation; доходность пут({ введите: 'CHANGE_PASSWORD_FORM_VALID' }); const validate = validateForm('changePasswordForm', formData); если (validate.valid) { выход put( actionCreators.submitChangePasswordFormValid() ); выход put(loader('показать')); пусть newPasswordResponse = выходной вызов (api.setChangePassword, oldPassword, newPassword); выход put(loader('скрыть')); если ( !newPasswordResponse.ok ) { пусть ошибки = serverError(newPasswordResponse); //console.log(ошибки); //console.log('ошибки newPasswordResponse'); выход put( showModalError({ошибка: ошибки })); выход put (actionCreators.submitNewPasswordFormFailed (ошибки)); // возвращаем ложь; } еще { доходность пут({ тип: KEYCHAIN_GET, // РезультатДействие: '' }); константная цепочка для ключей = доходность (KEYCHAIN_RESULT); // Сохранить в связку ключей выход put( keychainSet({ вход: keychain.login || ЛОЖЬ, пароль: keychain.password || ЛОЖЬ }) ); // последний экран выход put(redirectTo('спасибо')); вызов выхода (задержка, 300); выход put( actionCreators.changePasswordResetState() ); } } еще { выход put (showModalError ({ ошибка: validate.errors })); выход put (actionCreators.submitChangePasswordFormFailed (validate.errors)); выход put( actionCreators.changePasswordFailed() ); // выход put( actionCreators.submitFinFormFailed( ret.errors ) ); // выход put( actionCreators.registrationFailed()); } // Сброс логина // вызов выхода (задержка, 300); // выход put( actionCreators.resetState() ); } } поймать (е) { //console.log(e); } } функция экспорта validateForm(formKey, formData) { пусть Рет = { действительный: правда, ошибки: ложь }; переключатель (formKey) { случай 'changePasswordForm': схема = { oldPassword: V.required(validatePassword), новыйпароль: V.required(validatePassword), newPasswordConfirmation: V.required( R.equals( formData.newPassword )) }; перерыв; по умолчанию: перерыв; } ret.valid = V.validate(схема, formData); если (!ret.valid) { ret.errors = V.getErrors(схема, formData); ret.errors = R.zipObj( R.pluck('свойство', ret.errors), ret.errors ); } //console.log('isValid: ' + ret.valid.toString()); вернуть возврат; }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Нативное приложение React работает в режиме отладки, но не работает в режиме выпуска на iOS
Anonymous » » в форуме IOS - 0 Ответы
- 79 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Нативное приложение React работает в режиме отладки, но не работает в режиме выпуска на iOS
Anonymous » » в форуме IOS - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-