Вроде получилось получить доступ к логам с помощью
Там тот ещё лес дремучий, но где-то в глубине есть файл
Есть ли способ сделать это проще?🤔
xcrun xcresulttool export diagnostics --path ‘/Users/user/Library/Developer/Xcode/DerivedData/MyApp-abc/Logs/Test/Test-MyAppUITests-2025.06.21_07-56-42-+0200.xcresult' --output-path ./diagnostict
Там тот ещё лес дремучий, но где-то в глубине есть файл
…/StandardOutputAndStandardError-MyApp.txt
Есть ли способ сделать это проще?
Please open Telegram to view this post
VIEW IN TELEGRAM
В общем я решил убрать тесты, спайк на графике действительно был связан с ними.
Поскольку тестируется сразу несколько версий, включая различную локализацию, то создавалось много запусков приложения.
Ключевая проблема заключалась в том, что в тест бандл не был добавлен json с изначальными данными. И также я не отключил обращение к Firestore, поэтому на каждый запуск была попытка скачать все данные из Firestore.
Мокать Firestore, добавлять различные проверки на текущий контекс (тесты или нет) требую намного больше усилий (да и выглядит это супер криво), буду тестировать руками через TestFlight. Релизи довольно таки редкие, поэтому не проблема.
Всё же через трудности я учусь и познаю новое. Это несомненно радует 😊
Поскольку тестируется сразу несколько версий, включая различную локализацию, то создавалось много запусков приложения.
Ключевая проблема заключалась в том, что в тест бандл не был добавлен json с изначальными данными. И также я не отключил обращение к Firestore, поэтому на каждый запуск была попытка скачать все данные из Firestore.
Мокать Firestore, добавлять различные проверки на текущий контекс (тесты или нет) требую намного больше усилий (да и выглядит это супер криво), буду тестировать руками через TestFlight. Релизи довольно таки редкие, поэтому не проблема.
Всё же через трудности я учусь и познаю новое. Это несомненно радует 😊
👍1
Когда я узнал, что iPhone позволяет делать отмену введенного текста, а это было пару лет назад, просто обычным встряхиванием телефона, то сразу взял на заметку, что это можно использовать каким-нибудь прикольным образом.
Теперь я могу собирать фидбэк от пользователей таким образом. Нужно просто потрясти телефон, и приложение предложит зарепортить «неправильное слово».
На гугл картах тоже есть такая фишка🔵
Теперь я могу собирать фидбэк от пользователей таким образом. Нужно просто потрясти телефон, и приложение предложит зарепортить «неправильное слово».
На гугл картах тоже есть такая фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Всем привет 👋
Спешу с отличными новостями! Я наконец начал реализацию приложения, с задумки которого всё началось.
На этот раз всё идет куда лучше и быстрее. А главное получается структурировано, и верится, что поддержка будет так же проста, как и первые вьюхи.
🔸 Таргетная iOS 🍏 - хочу использовать относительно свежие инструменты.
🔸 В качестве хранилища - 👩💻 json документ. Причем картинки хранятся отдельно, а в json указаны их пути.
🔸 Таб с камерой 📸 находится в прогрессе, пока можно брать фото из библиотеки
🔸 Отдельная гордость - категории, они динамические, пользователь может создавать их самостоятельно
С обновлённым дизайном iOS 26 таб-навигация выглядит обалденно😍
Спешу с отличными новостями! Я наконец начал реализацию приложения, с задумки которого всё началось.
На этот раз всё идет куда лучше и быстрее. А главное получается структурировано, и верится, что поддержка будет так же проста, как и первые вьюхи.
С обновлённым дизайном iOS 26 таб-навигация выглядит обалденно
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Нужно ли разместить в TestFlight ✈️ или ждем полноценного релиза?
Anonymous Poll
25%
TestFlight
63%
Релиз
13%
Займись уже делом 😄
Самое большое наблюдение этого дня 😮
Есть массив изображений. При нажатии на одно из них хочется показать его на весь экран. Первое, что пришло на ум - использовать
Запоминаем, на каком индексе пользователь нажал на картинку, и выставляем флажок:
Перкрасно, но это не работает, т.к.
Другой (и рабочий) вариант - запаковать
Есть массив изображений. При нажатии на одно из них хочется показать его на весь экран. Первое, что пришло на ум - использовать
fullScreenCover(isPresented:)
Запоминаем, на каком индексе пользователь нажал на картинку, и выставляем флажок:
@State private var selectedImageIndex: Int? = nil
@State private var showFullScreenImage = false
ForEach(Array(images.enumerated()), id: \.offset) { idx, image in
Image(uiImage: image)
.onTapGesture {
selectedImageIndex = idx
showFullScreenImage = true
}
Перкрасно, но это не работает, т.к.
selectedImageIndex
передаётся дальше как nil
.Другой (и рабочий) вариант - запаковать
selectedImageIndex
в свою структуру и использовать fullScreenCover(item:)
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет друзья! 👋
Все это время я не терял ни одного момента и занимался приложением.
В основном концентрировался на 2х вещах:
🟥 Карта (MapKit)
С картами всё оказалось не так уж просто🗺
Для выбора места где был приобретен товар, решил использовать PointsOfInterest (POI). Эта фича работает прекрасно, в больших городах многие места отмечены на карте, и это облегчает выбор магазинов/кафе/ресторанов.
Однако тут есть проблема, которую, похоже, можно решить только лишь используя UIKit (настало его время😄 ). Суть - при выборе POI можно использовать механизм отслеживания изменений
Но при добавлении своих аннотаций, например, уже сохраненная точка, эта функциональность ломается. POI можно выбрать, но в
Поскольку эта часть оказалась слишком сложнее ожидаемого, решил отложить данную часть на потом. Зачем застревать на одном месте, верно?🙂
Следующиее - нужно показать карту вокруг места где пользователь находится сейчас. С этим ок, работает хорошо, беру локацию и позиционирую карту на этой точке. Дополнительно сохраняю последнее известное положения пользователя.
Но вот показать точку, где пользователь находится на карте (тот самый синий кругляш) - беда. Опять же аннотации ломают трекинг POIs. Исползование
Про
🟥 Share функциональность
Тут у меня всё ещё хуже, но это в отельном посте 😋
Продолжение следует…
Все это время я не терял ни одного момента и занимался приложением.
В основном концентрировался на 2х вещах:
С картами всё оказалось не так уж просто
Для выбора места где был приобретен товар, решил использовать PointsOfInterest (POI). Эта фича работает прекрасно, в больших городах многие места отмечены на карте, и это облегчает выбор магазинов/кафе/ресторанов.
Однако тут есть проблема, которую, похоже, можно решить только лишь используя UIKit (настало его время
Map(position: $mapPosition, selection: $selectedPlace)
.onChange(of: selectedPlace)
Но при добавлении своих аннотаций, например, уже сохраненная точка, эта функциональность ломается. POI можно выбрать, но в
onChange
выбранные точки не прилетают. Насколько понял, selectedPlace начинает распространяться на созданные мной аннотации. С помощью UIKit, вроде, можно разделить карту на отдельные слои, и тогда это не будет проблемой.Поскольку эта часть оказалась слишком сложнее ожидаемого, решил отложить данную часть на потом. Зачем застревать на одном месте, верно?
Следующиее - нужно показать карту вокруг места где пользователь находится сейчас. С этим ок, работает хорошо, беру локацию и позиционирую карту на этой точке. Дополнительно сохраняю последнее известное положения пользователя.
Но вот показать точку, где пользователь находится на карте (тот самый синий кругляш) - беда. Опять же аннотации ломают трекинг POIs. Исползование
.mapControls { MapUserLocationButton() }
работает только при нажатии на кнопку. При последующем скролинге точка пропадает с карты.Про
overlay
просто ничего, я его пробовал, но не помогло нисколько.Тут у меня всё ещё хуже, но это в отельном посте 😋
Продолжение следует…
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Большая просьба, если кто-то работал с картами, посоветуйте как с ними ладить. Возможно есть волшебная либа, которая сделает всю грязную работу? Да, я тот ещё оптимист 🥺
Документации совсем мало, в основном это видео с wwdc. Чтобы посмотреть их все нужно кучу времени потратить. Предварительно понять что нужно смотреть, а что можно пропустить не очень получается.
Документации совсем мало, в основном это видео с wwdc. Чтобы посмотреть их все нужно кучу времени потратить. Предварительно понять что нужно смотреть, а что можно пропустить не очень получается.
Please open Telegram to view this post
VIEW IN TELEGRAM
Добавлю немного скринов:
🔸 список сохраненных вкусняшек (или наоборот)
🔸 большое вью с картой, где можно выбрать место
🔸 вью редактирования/просмотра с превьюшкой карты (тут можно увидеть кнопку share)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Через полгода как я завел девелоперский аккаунт, apple почему-то поинтересовался моим паспортом и заблокировал 👨💻 AppStore Connect.
Через полдня после того, как я отправил всё, что им было нужно, доступ восстановили 😊
Через полдня после того, как я отправил всё, что им было нужно, доступ восстановили 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Всем привет 👋 Давно не было от меня новостей
Так вот, несу прикольный апдейт.
Я начал параллельно смотреть на геймдев, и познакомился с Godot👩💻
Так уж вышло, что для меня классикой является змейка, поэтому вот моя версия:
Так вот, несу прикольный апдейт.
Я начал параллельно смотреть на геймдев, и познакомился с Godot
Так уж вышло, что для меня классикой является змейка, поэтому вот моя версия:
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Видео с телефона
Так уж получается, что я прыгаю от одного проекта к другому. Мне не хочется сделать проект и забросить его. К тому же, пользователи, знакомые и я пользуемся и хотим видеть какие-то улучшения в приложениях.
Это время я занимался улучшением стратегии подбора слов в DerDieDas🇩🇪
Вот самое интересное:
🔸 Создал отдельный Package в котором храню бизнес логику, и линкую его в основной проект.
Воспользовался подходом, который подсмотрел в упоминаемом ранее проекте: https://github.com/Dimillian/IcySky/tree/main
Самые классные плюшки тут:
- это можно легко тестировать (алгоритм получился не очень простой)
- мокаю всё, что захочу
- дизайн классов построенный на абстракциях
- разбиение проекта на модули, single responsibility наше всё (несмотря на то, что проект небольшой, поддерживать его становится сложнее со временем)
🔸 Алгоритм подбора слов основанный на комбинации стратегий:
- due words (слова, которые пора повторить) способом 4х колод
- примерный уровень пользователя (давать слова из этого же уровня и выше)
- калибровка, если уровень ещё не известен
То, что меня тут больше всего цепляет, это https://en.wikipedia.org/wiki/Sigmoid_function
Я использую её, чтобы откорректировать вес среднего по каждому уровню.
Например, пользователь ответил правильно на 5 из 5 на уровне A2 - вроде в среднем 100%, но 5 вопросов это мало, поэтому с помощью Сигмоида это всего лишь 24%. Как? Сделаю небольшой отдельный пост (там всё просто).
🔸 Отказ от CoreData?
Попробовать было интересно и даже полезно. Но с этим товарищем нам, похоже, не по пути.
Пока вижу так, что вся эта реактивщина изменений мешает. Мне намного удобнее иметь отдельный метод, через который я делаю изменения и контролирую все зависимые от него части.
Более конкретный пример: сложно реализовать локальные кэши, в которых я хочу сделать оптимизации. Например, мне нужно хранить среднее. При реактивном подходе, среднее нужно пересчитывать. Иначе - все изменения под контролем, я могу использовать переменные для хранения различных счетчиков, и использовать их оптимальнее.
Может это излишняя оптимизация, но мне так легче. А это главное!
Не спешу с этим, но похоже придется убрать CoreData. Посмотрим ещё😮
Это время я занимался улучшением стратегии подбора слов в DerDieDas
Вот самое интересное:
Воспользовался подходом, который подсмотрел в упоминаемом ранее проекте: https://github.com/Dimillian/IcySky/tree/main
Самые классные плюшки тут:
- это можно легко тестировать (алгоритм получился не очень простой)
- мокаю всё, что захочу
- дизайн классов построенный на абстракциях
- разбиение проекта на модули, single responsibility наше всё (несмотря на то, что проект небольшой, поддерживать его становится сложнее со временем)
- due words (слова, которые пора повторить) способом 4х колод
- примерный уровень пользователя (давать слова из этого же уровня и выше)
- калибровка, если уровень ещё не известен
То, что меня тут больше всего цепляет, это https://en.wikipedia.org/wiki/Sigmoid_function
Я использую её, чтобы откорректировать вес среднего по каждому уровню.
Например, пользователь ответил правильно на 5 из 5 на уровне A2 - вроде в среднем 100%, но 5 вопросов это мало, поэтому с помощью Сигмоида это всего лишь 24%. Как? Сделаю небольшой отдельный пост (там всё просто).
Попробовать было интересно и даже полезно. Но с этим товарищем нам, похоже, не по пути.
Пока вижу так, что вся эта реактивщина изменений мешает. Мне намного удобнее иметь отдельный метод, через который я делаю изменения и контролирую все зависимые от него части.
Более конкретный пример: сложно реализовать локальные кэши, в которых я хочу сделать оптимизации. Например, мне нужно хранить среднее. При реактивном подходе, среднее нужно пересчитывать. Иначе - все изменения под контролем, я могу использовать переменные для хранения различных счетчиков, и использовать их оптимальнее.
Может это излишняя оптимизация, но мне так легче. А это главное!
Не спешу с этим, но похоже придется убрать CoreData. Посмотрим ещё
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2⚡1👌1
Похоже, получилось громоздко 🤔 Какой размер постов вам удобнее (спасибо, что читаете)?
Final Results
0%
Короткие
67%
Средние
17%
Большие
67%
И так сойдёт!