Dmitry
https://developer.apple.com/library/archive/documentation/IDEs/Conceptual/xcode_guide-continuous_integration/index.html
Dmitry
Возможно, что есть смысл отравлять логи пачками, а не на ходу
Eugene
🤔интересно Просто хотелось бы где-нибудь в облаке все это билдить и получать готовую аппу, надо бы погуглить
Aleksei
Возможно, что есть смысл отравлять логи пачками, а не на ходу
ну вот да мне конечно пока вообще не понятно как померить влияние логов на производительность приложения, и стоит ли заморачиваться у меня сейчас вообще ситуация такая что есть эндпоинт который принимает плэйн текст, вот и думаю как малой кровью обойтись
Dmitry
Хоть какая, но нагрузка
Aleksei
🤔интересно Просто хотелось бы где-нибудь в облаке все это билдить и получать готовую аппу, надо бы погуглить
с андроидом все просто, можете билдить везде где запустится грейдл с иос сложнее, так как нужен мак (неважно какая CI будет, главное что мак) у нас например дженкинс слейв это мак мини, на нем уже с фастлейном собираются аплики, иос энтерпрайз провиженом подписывается
Aleksei
@gblack9 как думаешь, есть способ в обход бриджа сливать логи? или это не будет большой проблемой, так как уже и так строка, ее сериализовать то не надо надо бы наверно тест написать, но пока не пойму какой конкретно)
Unknown number
Ребят, кто как организует логирование в приложении? Интересует не логирование во время разработки, а например на этапе тестирования, когда отдел тестеру билд (или первым пользователям) и тут тебе приходит скрин с минимальным описанием. Чтобы в такие моменты больше информации иметь
Sentry использую. Для самописных ошибок/логов и для тех что вылетают по эксепшенам и так далее. /** * Using Sentry service log all warnings/errors which can be thown by the app. */ import { Platform } from 'react-native'; import { Sentry, SentrySeverity } from 'react-native-sentry'; import Config from 'react-native-config'; import R from 'ramda'; const capitalize = R.replace(/^./, R.toUpper); class SentryLogger { install = () => { Sentry.config( Config.SENTRY_URL, ...(Platform.OS === 'ios' && { deactivateStacktraceMerging: true, }), ).install(); }; logToSentry = ({ error, type = 'error', description = '', ...rest }) => { if (!__DEV__) { if (typeof error === 'object') { Sentry.captureException(error); } else { const errorInfo = `${type}: ${description}: ${error}, rest: ${JSON.stringify( { ...rest }, )}`; Sentry.captureMessage(errorInfo, { level: SentrySeverity[capitalize(type)], }); } } }; log = ({ error, type = 'debug', description = '', ...rest }) => { if (__DEV__) { const errorInfo = `${type}: ${description}: ${error}, rest: ${JSON.stringify( { ...rest }, )}`; /* eslint-disable no-console */ if (type === 'error') console.error(errorInfo); else if (type === 'warning') console.warn(errorInfo); else console.log(errorInfo); /* eslint-enable no-console */ } }; warning = errorProps => { this.log({ ...errorProps, type: 'warning' }); this.logToSentry({ ...errorProps, type: 'warning' }); }; error = errorProps => { this.log({ ...errorProps, type: 'error' }); this.logToSentry({ ...errorProps, type: 'error' }); }; } export default new SentryLogger();
Gena
@gblack9 как думаешь, есть способ в обход бриджа сливать логи? или это не будет большой проблемой, так как уже и так строка, ее сериализовать то не надо надо бы наверно тест написать, но пока не пойму какой конкретно)
А не надо в обход бриджа, т.к. он и так асинхронный, можно даже ответ не ждать в JS... можно их рэйт-лимитить ещё (верней в пачки собирать)... но если такое нужно, то будут проблемы с отправкой из натива потом... слишком большой объем. Вот в нативе отправлять (если самому писать), там много подводных камней...
Aleksei
я не про краши
zamir
ребят, помогите плиз, как это исправить??
Gena
не понял про "рейт-лимитить") а какие проблемы в нативе, вроде все просто выглядит
Я имел ввиду... что-то типа debounce из lodash, чтоб в натив не больше одного запроса в интервал времени уходило (это потенциально цпу экономит). В нативе проблемы такие: 1. Если приложение внезапно закрылось, лог не уйдет (можно его терять?) 2. Если сети нет, надо лог хранить? Что делать с сохраненными при старте...
Aleksei
Я имел ввиду... что-то типа debounce из lodash, чтоб в натив не больше одного запроса в интервал времени уходило (это потенциально цпу экономит). В нативе проблемы такие: 1. Если приложение внезапно закрылось, лог не уйдет (можно его терять?) 2. Если сети нет, надо лог хранить? Что делать с сохраненными при старте...
правильные вопросы 🙂 но меня пока сейчас больше заботит чтобы логи жс тред не забивали (и бридж), не охота чтобы это на пользователях сказалось в первую очередь, пускай лучше лог потеряется, чем перфоманс просядет
zamir
ребят, помогите плиз, как это исправить??
как можно убрать из андроидоксого билда этот фаст имейдж?
Dmitry
Вообще фоновой таской
Maxim 📱 D
https://stackoverflow.com/questions/43340990/cannot-change-selected-text-after-change-value-of-textinput Знает кто как эту штуку пофиксить? то что в ответах не работает)
Aleksei
Надо мерить, но мне кажется не забьют они бридж... опять же, debounce всё решит. Данные так и так копировать...
есть идеи для тест кейса каноничного? 🙂 я сделаю, но надо понять что и как мерить
Gena
есть идеи для тест кейса каноничного? 🙂 я сделаю, но надо понять что и как мерить
Гм... надо мерить максимальную пропускную способность бриджа. Проблема, что она не одномерная (зависит от многих факторов потенциально). Можно попробовать сделать так: 1. Только логи. Пустить в цикле setImmediate лог и увеличивать а. объем лога б. кол-во логов Пока тред, где диспатчинг происходит (по моему это UI thread, но это не точно) не встанет в 100% CPU с постоянно увеличивающимся расходом памяти. Получится абсолютный максимум для конкретного девайся (симулятора). 2. Модельное приложение... то же самое + либо анимация либо ререндер... не знаю...
Gena
Возможно после цифр из п.1, всё остальное можно будет и не мерить )
Eugene
Товарищи, вот есть у меня что-то типа {block && <View>тут чекбоксы</View> } где-то я делаю setState({ block: !this.state.block }) Хочу как-нибудь анимировать появление исчезновение - это на какую анимацию смотреть 🤔
Gena
Да, в нативе для теста можно просто заглушку поставить... пренебречь этой составляющей (она всё равно в другом потоке)
Gena
хм, а что нам даст информация о пропускной способности?
Эту метрику можно использовать для сравнения какую нагрузку создает каждая подсистема или часть функционала.
Gena
И если её получить как метрику (цифру), то это даст возможность иметь некий объективный критерий для определения того плохо пользователю от добавления логов станет или нет (и от какого их кол-ва)
Aleksei
Товарищи, вот есть у меня что-то типа {block && <View>тут чекбоксы</View> } где-то я делаю setState({ block: !this.state.block }) Хочу как-нибудь анимировать появление исчезновение - это на какую анимацию смотреть 🤔
вариант первый, сделать компонент обертку который в cDM делает анимацию opacity, и тогда конструкция будет выглядеть так {block && <WrapperAnimatedView>тут чекбоксы</WrapperAnimatedView> } но тут отпадает анимация fade out второй вариант тоже обертка, которая будет запускать анимацию в cWRP если изменилось количество чилдренов и выглядит это как то так <WrapperAnimatedView>{block && тут чекбоксы}</WrapperAnimatedView>
Eugene
Хм, понял:) Вот желание использовать cWRP вообще нет:) Темболее с флагом unsafe 🤔
Eugene
Буду пробовать вообщем, куда копать я понял)
Aleksei
И если её получить как метрику (цифру), то это даст возможность иметь некий объективный критерий для определения того плохо пользователю от добавления логов станет или нет (и от какого их кол-ва)
если я правильно понял, то мне получается надо будет потом в реальном приложении так же мерить пропускную способность и уже эту величину сравнивать с максимумом, так? 🙂
Aleksei
теоретически да
звучит интересно, спасибо за идеи! 🙂
Gena
Кстати, мы же можем реально измерить время (прям встроенным в Xcode профайлером), которое диспатчер вызовов (он же бридж) потратил на распаковку данных из js и вызов нужного нативного метода... я помню, там вроде была фактически одна ф-ция (в ios). Сейчас не могу поискать к сожалению (в отпуске без компа).
Maxim 📱 D
https://stackoverflow.com/questions/43340990/cannot-change-selected-text-after-change-value-of-textinput Знает кто как эту штуку пофиксить? то что в ответах не работает)
вычислил что если возвращать обратно строку после изменения ее то выделение опять работает, но смысл тогда в этой кнопке. Как будто value не до конца принимает новое состояние.
Maxim 📱 D
Нид хелп( неохото нативный текстинпут писать(
MrSmith
Ребят как мне обновить пакет с зависимостями?
MrSmith
Хочу получить роуты версии 2 но мне нпм орет что не хватает зависимостей
Anton
А конкретней, чего пишет?
MrSmith
Сек ша спродуцирую
MrSmith
А конкретней, чего пишет?
/Users/dns/Desktop/frelance/TicketsWallet/ios/TicketsWallet/AppDelegate.m:15:9: fatal error: 'ReactNativeNavigation/ReactNativeNavigation.h' file not found #import <ReactNativeNavigation/ReactNativeNavigation.h> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated.
MrSmith
https://github.com/wix/react-native-navigation/issues/296
MrSmith
Тут говорят что файлы переместились и они по пути есть
MrSmith
Но где мне установить пути
Anton
Пробовал link выполнить?
Anton
react-native link
MrSmith
react-native unlink react-native-navigation
MrSmith
react-native link react-native-navigation
Andrei
Ребят, всем привет, пытаюсь связать две библиотеки с помощью react-native link, но получаю ошибку -bash: react-native command not found В чем проблема? Нахожусь в корневой папке
Andrei
Работаю с мака
Alexander
В stack navigator лучше юзать componentDidMount или didFocus?
Vit
Wat?)
Alexander
Wat?)
Ну так как в стак навигаторе экраны маунтятся каждый раз, а не только в первый, то componentDidMount срабатывает на каждое открытие экрана
Vit
Иии?)
Alexander
Иии?)
Что и? Что в таком случае использовать? Didmount реакта или didfocus навигатора?
Vit
Блин для чего?)
Alexander
Да элементарно данные с сервера подгрузить
Serhii
Редакс есть?
Alexander
Редакс есть?
Только что это изменит?
Serhii
Делаешь проверку, данных нет - подгружаешь
Vit
данные - дидмаунт
Serhii
На дидмаунт
Serhii
Не понимаю в чём проблема
Alexander
Не понимаю в чём проблема
Нет проблемы. Просто раз уж в некоторых местах приходится делать через didFocus, то вот и спрашиваю
Pavel
Нет проблемы. Просто раз уж в некоторых местах приходится делать через didFocus, то вот и спрашиваю
На дидфокус, если это вкладка. Иначе данные не будут обновляться - вкладка всего 1 раз маунтится в отличие от модалки.
Pavel
А в чем тогда вопрос?
Vit
Как бы сказать вам, что я не тупой?
да норм всё) тут чисто ux уже