#ios #swift #notificationcenter #notification
Недавно в рабочем iOS-приложении перестали сохраняться push-уведомления в
Проблема проявилась где-то после перехода на новый Xcode 16*, что бы это могло быть? 🤔
Выяснилось, что
Причем раньше все работало отлично, где-то 4-5 релизов назад 😱
✅ Решение оказалось простым - нужно было добавить
Скорее всего, неправильная настройка
⚠️ Важно всегда проверять
Недавно в рабочем iOS-приложении перестали сохраняться push-уведомления в
CoreData: пользователи не видели историю уведомлений, хотя сами уведомления приходили и отображались на экране телефона корректно.Проблема проявилась где-то после перехода на новый Xcode 16*, что бы это могло быть? 🤔
Выяснилось, что
Notification Service Extension не мог получить доступ к Core Data файлам из-за неправильной настройки Target Membership. Файлы модели данных не были включены в target для extension, поэтому при попытке инициализации Core Data возникала ошибка.Причем раньше все работало отлично, где-то 4-5 релизов назад 😱
✅ Решение оказалось простым - нужно было добавить
Core Data файлы в Target Membership для NotificationService. После этого extension снова смог сохранять уведомления в базу данных.Скорее всего, неправильная настройка
Target Membership возникла при рефакторинге проекта или добавлении новых файлов, а может быть и вовсе при переходе с "групп" на "папки" 🙈Xcode иногда не добавляет автоматически файлы в нужные targets, особенно при работе с `extension`'ами, которые имеют отдельную конфигурацию.⚠️ Важно всегда проверять
Target Membership при добавлении новых файлов в проект, особенно если они используются в нескольких таргетах.🔥8
easy_dev991
#ios #swiftui #performance Убираем лишние вычисления body в SwiftUI View
#ios #swiftui #equatable
Наглядный пример использования протокола
Вьюха принимает на вход несколько свойств, и ни одно из них не изменяется при нажатии на кнопку "избранного" в навбаре, но по умолчанию вьюха обновляется при изменении этого
Все, что нужно было сделать для исправления проблемы:
Это первый случай, когда мне пригодился протокол
Наглядный пример использования протокола
Equatable, чтобы избавиться от лишних перерисовок вьюхи. На первом видео до исправления, на втором - после.Вьюха принимает на вход несколько свойств, и ни одно из них не изменяется при нажатии на кнопку "избранного" в навбаре, но по умолчанию вьюха обновляется при изменении этого
State-свойства на экране.Все, что нужно было сделать для исправления проблемы:
struct HTMLContentView: UIViewRepresentable, @preconcurrency Equatable {
static func == (lhs: HTMLContentView, rhs: HTMLContentView) -> Bool {
lhs.infopost == rhs.infopost && lhs.fontSize == rhs.fontSize
}
// остальной код
}
Это первый случай, когда мне пригодился протокол
Equatable с момента публикации статьи об этом, и все же он пригодился 👌🔥5❤2
Есть разные форматы трудоустройства, и iOS-разработчики не исключение. Давайте узнаем, какой формат сколько людей предпочитает.
Anonymous Poll
67%
Выбираю работу по трудовому договору или договору ГПХ (с постоянным заказчиком)
2%
Выбираю самозанятость с постоянным заказчиком
7%
Выбираю ИП с постоянным заказчиком
2%
Выбираю фриланс с разными заказчиками (как повезет/кто подвернется)
14%
Стремлюсь начать зарабатывать деньги в iOS-разработке
8%
Для меня iOS-разработка - хобби; не слежу за доходом в этом направлении или не зарабатываю тут
😁3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#ios #ios26 #swiftui #navigationview #bug #contest
Представляю вашему вниманию очередной баг iOS 26 при работе с
На iOS 26 экран автоматически закрывается при первом вызове любого из
Исправить ситуацию можно как минимум двумя способами, один из которых совсем простой, а второй чуть посложнее, но применяется в проекте во многих местах с другой целью.
--------
Позже напишу статью на эту тему, а пока что объявляю мини-конкурс: кто правильно назовет причину возникновения бага в iOS 26, тот молодец 🚀
Представляю вашему вниманию очередной баг iOS 26 при работе с
NavigationView, который отлично работает на всех версиях iOS, в том числе на iOS 26.На iOS 26 экран автоматически закрывается при первом вызове любого из
menu/picker/confirmationDialog, а вот код этого экрана, и там нет никаких ошибок, и чинить там нечего 🤦♂️Исправить ситуацию можно как минимум двумя способами, один из которых совсем простой, а второй чуть посложнее, но применяется в проекте во многих местах с другой целью.
--------
Позже напишу статью на эту тему, а пока что объявляю мини-конкурс: кто правильно назовет причину возникновения бага в iOS 26, тот молодец 🚀
🔥6
#swift #news
Вчера состоялся превью-релиз Swift SDK для Android, весь анонс и детали можно почитать по ссылке.
Кто знает, вдруг через пару лет можно будет с легкостью разрабатывать андроид-приложения на свифте?)
Вчера состоялся превью-релиз Swift SDK для Android, весь анонс и детали можно почитать по ссылке.
Кто знает, вдруг через пару лет можно будет с легкостью разрабатывать андроид-приложения на свифте?)
Swift.org
Announcing the Swift SDK for Android
Swift has matured significantly over the past decade — extending from cloud services to Windows applications, browser apps, and microcontrollers. Swift powers apps and services of all kinds, and thanks to its great interoperability, you can share code across…
🔥1
#xcode #bug
В
Почистить кэш, пересоздать файл со строками не помогает.
На скриншоте причина, почему мне завернули очередной релиз приложения с площадками.
Исправляется эта фигня откатом с
В
Xcode 26 у меня внезапно сломалась локализация для Info.plist-файла - просто перестали работать строки на русском языке, а на английском все ок.Почистить кэш, пересоздать файл со строками не помогает.
На скриншоте причина, почему мне завернули очередной релиз приложения с площадками.
Исправляется эта фигня откатом с
xcstrings на старый формат strings для локализации Info.plist🙈😨4❤🔥1
easy_dev991
#ios #swiftui #scrollview #scrollviewreader #scrollto Скроллим к нужному элементу
#ios #swiftui #scrollview #scrollto
На днях застрял со скроллом к нужному элементу и думал "что же не так?".
У меня есть список элементов в
Все оказалось очень просто - нужно явным образом добавить модификатор
Потом вспомнил, что у меня уже есть статья на эту тему 😁
На днях застрял со скроллом к нужному элементу и думал "что же не так?".
У меня есть список элементов в
ForEach, внутри массив с Identifiable-элементами, но scrollTo(id) не работает.Все оказалось очень просто - нужно явным образом добавить модификатор
.id для всех элементов в цикле ForEach. Потом вспомнил, что у меня уже есть статья на эту тему 😁
❤5😁5😴1
#xcode #simulator #bug
Вчера обновил
В чем же дело?
В "мониторинге активности" там висит
Но что за краши?
Открыл приложение "консоль", и увидел там десятки отчетов о краше для
Вот кусок крашлога:
Несложно предположить, что дело в симуляторе. Оказалось, что запущенный симулятор с
Так что если вы уже обновились до
Вчера обновил
Xcode до релизной версии 26.1, и второй день подряд ноут сильно греется и шумит вентиляторами.В чем же дело?
В "мониторинге активности" там висит
ReportCrash, который грузит процессор 140%+.Но что за краши?
Открыл приложение "консоль", и увидел там десятки отчетов о краше для
MercuryPosterExtension (кто бы еще знал, что это).Вот кусок крашлога:
Coalition: com.apple.CoreSimulator.SimDevice.15175812-BCE6-41D0-B391-CEF8416AE15F [12203]
Responsible Process: SimulatorTrampoline [2600]
Несложно предположить, что дело в симуляторе. Оказалось, что запущенный симулятор с
iOS 26.1 постоянно ловит какие-то системные краши, но визуально этого не видно.Так что если вы уже обновились до
Xcode 26.1, то рекомендую не использовать симуляторы iOS 26.1 на постоянной основе, иначе есть риск словить постоянную нагрузку на процессор из-за ReportCrash 🤪❤8
#ios #swift #swiftui #bug
Угадайте, на каком из скриншотов у нас iOS 26 😁
А вот и код:
Вывод:
В больше нельзя использовать для скрытия кнопки - нужно явным образом закрывать кнопку проверкой 👏
Угадайте, на каком из скриншотов у нас iOS 26 😁
А вот и код:
struct DemoToolbarOpacity: View {
var body: some View {
NavigationStack {
Color.green.ignoresSafeArea()
.toolbar {
ToolbarItem(placement: .topBarLeading) {
if false {
Button("Left") {
print("tap left button")
}
}
}
ToolbarItem(placement: .topBarTrailing) {
Button("right") {
print("tap right button")
}
.opacity(0)
}
}
}
}
}
Вывод:
iOS 26opacityif/else❤5
#ios #xcode #bug
Любопытная аналитика про размер iOS-приложений, собранных в X
- При сборке из
- При сборке из
- При сборке из
Откуда взялись дополнительные
Любопытная аналитика про размер iOS-приложений, собранных в X
code 26.0.1 и Xcode 26.1 на примере приложения с площадками для тренировок:- При сборке из
Xcode 26.0.1 приложение весит около 11 мб- При сборке из
Xcode 26.1 приложение весит уже 16.5 мб- При сборке из
Xcode 26.1 после доработок (предстоящий релиз) вес почему-то снизился до 15.5 мб, хотя кода стало больше 🙄Откуда взялись дополнительные
5 мб, эпл 🤯?GitHub
GitHub - easydev991/SwiftUI-WorkoutApp: Street Workout Площадки (пет-проект)
Street Workout Площадки (пет-проект). Contribute to easydev991/SwiftUI-WorkoutApp development by creating an account on GitHub.
👍4😴2
#ios #swiftui #confirmationdialog #bug
Любопытный баг в SwiftUI при работе с
Во вложении 2 видео, где я делаю одно и то же действие, но во втором видео диалог появляется повторно без триггера с моей стороны.
Код для первого видео (где все ок):
Код для второго видео (где баг):
Любопытный баг в SwiftUI при работе с
confirmationDialog в навбаре.Во вложении 2 видео, где я делаю одно и то же действие, но во втором видео диалог появляется повторно без триггера с моей стороны.
Код для первого видео (где все ок):
.toolbar {
if !entries.isEmpty {
ToolbarItem(placement: .topBarTrailing) {
deleteAllButton
}
}
}
Код для второго видео (где баг):
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
if !entries.isEmpty {
deleteAllButton
}
}
}
👍1
#ios #appstore #appstoreconnect
Сегодня модераторы одобрили релиз моего нового приложения с тренировками (с четвертого раза), и я узнал на личном опыте, почему же в аппстор пропускают клонов телеграм 🙈
Если интересно узнать, ставьте 👍
Ссылка на гитхаб с новым приложением тут.
Сегодня модераторы одобрили релиз моего нового приложения с тренировками (с четвертого раза), и я узнал на личном опыте, почему же в аппстор пропускают клонов телеграм 🙈
Если интересно узнать, ставьте 👍
Ссылка на гитхаб с новым приложением тут.
GitHub
GitHub - easydev991/SwiftUI-SotkaApp: Street Workout Тренировки (пет-проект)
Street Workout Тренировки (пет-проект). Contribute to easydev991/SwiftUI-SotkaApp development by creating an account on GitHub.
👍13
easy_dev991
#ios #appstore #appstoreconnect Сегодня модераторы одобрили релиз моего нового приложения с тренировками (с четвертого раза), и я узнал на личном опыте, почему же в аппстор пропускают клонов телеграм 🙈 Если интересно узнать, ставьте 👍 Ссылка на гитхаб…
Teletype
Как появляются клоны в AppStore
Неделю назад я опубликовал свое третье приложение в AppStore, и прошел интересный квест во время модерации - приложение не хотели...
❤2🤷2