easy_dev991
626 subscribers
33 photos
21 videos
3 files
174 links
Делюсь интересными находками/лайфхаками в процессе разработки под iOS, и возможно ты найдешь что-то полезное для себя!

GitHub: https://github.com/easydev991
Download Telegram
Снимок экрана 2024-04-04 в 10.35.54.png
110.3 KB
#ios #xcode #fix #log

Чиним Logging Error в Xcode 15+

Иногда Xcode может выводить в консоли ошибку с таким текстом:
Logging Error: Failed to initialize logging system. Log messages may be missing. If this issue persists, try setting IDEPreferLogStreaming=YES in the active scheme actions environment variables.

Для исправления ситуации делаем то, что написано в тексте ошибки, т.е. настраиваем IDEPreferLogStreaming=YES для активной схемы в Environment Variables
👍4🔥2🤩1
#terminal #xcode #fix #simulator #hint

Запускаю симулятор в Xcode и вижу такую ошибку, хотя вчера все отлично работало 🤦‍♂️

Мне помогла команда в терминале:


sudo killall -9 com.apple.CoreSimulator.CoreSimulatorServicesudo killall -9 com.apple.CoreSimulator.CoreSimulatorService
5🔥2🤣2
#xcode #fix

В Xcode 15.4 поправили баг с лишним ворнингом у сгенерированных экстеншенов для ассетов (цвета, картинки) - это успех 👍

Ссылка на описание релиза и цитата:
Fixed an issue where generated asset symbols emitted warnings with Swift strict concurrency checking enabled.


Можно будет убирать лишний код из проекта:


import DeveloperToolsSupport

// https://forums.swift.org/t/xcode-15-3-rc-issues-warnings-for-generated-code/70353/10
extension DeveloperToolsSupport.ColorResource: @unchecked Sendable {}
🤣3🔥2
#ios #swiftui #xcode #preview

Рубрика "За кулисами", или как работает SwiftUI превью при подготовке статьи 🤓
😁7👾1
#ios #xcode #test #testing

Нашел интересный кейс, когда Xcode выдает предупреждение, которого быть не должно:


let optionalInt: Int? = 5
let optionalString: String? = "asdf"
let optionalBool: Bool? = false
let requiredInt = try #require(optionalInt) // <- все ок
let requiredString = try #require(optionalString) // <- все ок
let requiredBool = try #require(optionalBool) // <- выдает ворнинг и предлагает безопасно развернуть опционал
👍2
#hint #xcode

Как запустить Xcode 15* на MacOs 15*?

Очень просто: правый клик на иконке приложения в "программах" -> показать содержимое пакета -> переходим в папку Contents/MacOs -> дважды кликаем по скрипту Xcode
4
#hint #xcode

Очищаем память на маке от мусора Xcode и не только

Эта статья может пригодиться, если после удаления DerivedData на маке все еще мало свободного места. И даже после удаления Xcode/AndroidStudio могут сохраниться старые данные - будем их удалять.

Я за полчаса удалил почти 200 гб 🤯

Почитать можно в платном канале:
- базовая подписка
- продвинутая подписка
- сеньорская подписка
🔥31
#xcode #bug

В Xcode 16.3 для дебага приходилось нажимать esc при вводе названий свойств в консоли, чтобы увидеть подсказки.

Недавно вышла релизная версия Xcode 16.4, в которой этот баг поправили.
Ура! 🎉
🔥31
#ios #automation #fastlane

Я уже рассказывал как мне нравится Xcode Cloud для публикации сборок - минимум настроек, все работает хорошо.

Вчера настроил публикацию скриншотов в пет-проекте с использованием fastlane, и выключил воркфлоу в Xcode Cloud, потому что:

⚠️ Он работает медленно - сборка на ноуте (с fastlane) занимает меньше минуты, а в облаке это растягивается на 5 минут
⚠️ Для публикации скриншотов в любом случае нужно или делать ручную работу, или запустить fastlane

Теперь про публикацию скриншотов через fastlane
Для наглядности вот логи:

[18:40:04]: Driving the lane 'ios upload_screenshots' 🚀
...
[18:40:09]: Starting with the upload of screenshots...
[18:40:11]: Deleted 'ru APP_IPAD_PRO_3GEN_129' - (0.814763 secs)
[18:40:11]: Deleted 'en-US APP_IPHONE_67' - (0.814563 secs)
[18:40:11]: Deleted 'ru APP_IPHONE_67' - (0.837923 secs)
[18:40:11]: Deleted 'en-US APP_IPAD_PRO_3GEN_129' - (0.915516 secs)
[18:40:12]: Number of screenshots not deleted: 0
[18:40:12]: Successfully deleted all screenshots
...
[18:40:17]: Uploaded './fastlane/screenshots/ru/iPhone 15 Pro Max-1-[18:40:21]: Uploaded './fastlane/screenshots/ru/iPhone 15 Pro Max-3-sortByDate.png'... (3.672329 secs)
[] Waiting for all the screenshots to finish being processed...
[18:40:28]: Successfully uploaded all screenshots
[] Sorting screenshots uploaded...
[18:40:29]: Successfully uploaded screenshots to App Store Connect


Итого: с момента запуска команды до окончания публикации и сортировки скриншотов прошло 26 секунд - это намного быстрее, чем вручную публиковать скриншоты для двух локализаций на iPad/iPhone, еще и в правильном порядке.
В appstoreconnect для сохранения нужного порядка отображения скриншотов приходится загружать картинки по одной в желаемом порядке🙈

Теперь важные нюансы.

1️⃣ Несмотря на возможность вручную загрузить скриншоты для нужных диагоналей с самых новых девайсов (iPhone 16 Pro Max, iPad M4), fastlane так не может - нужно делать скриншоты на других девайсах, подробнее написал в ридми.
Если попытаться загрузить скриншоты для 16 Pro Max и iPad M4, будут ошибки типа таких:

[16:44:44]: 🚫 Invalid screenshots were detected! Here are the reasons:
[16:44:44]: 🚫 Error: ./fastlane/screenshots/en-US/iPad Pro 13-inch (M4)-1-demoList.png - Invalid screen size (Actual size is 2064x2752. See the specifications to fix https://help.apple.com/app-store-connect/#/devd274dd925)
...
[16:44:44]: 🚫 Error: ./fastlane/screenshots/ru/iPhone 16 Pro Max-3-sortByDate.png - Invalid screen size (Actual size is 1320x2868. See the specifications to fix https://help.apple.com/app-store-connect/#/devd274dd925)

Да, я прочитал документ по ссылке из логов с ошибкой, и я нашел там iPhone 16 Pro Max + iPad Pro (M4), но fastlane не может их опубликовать 🤔

2️⃣ Если ваш аккаунт связан с несколькими командами разработки, то при настройке fastlane нужно явно указать идентификатор команды в поле itc_team_id, пример есть в Appfile - даже если вы не знаете идентификатор, то при первом запуске команды для публикации скриншотов fastlane сам предложит выбрать команду, там и можно скопировать идентификатор и поставить в Appfile.

3️⃣ По умолчанию fastlane делает много всего в команде upload_to_app_store, и лучше сразу выключить лишнее, например, публикацию бинарного файла приложения, запуск precheck перед отправкой и т.д., более подробно про все эти настройки можно почитать в официальной документации к fastlane.

4️⃣ Лучше сразу настроить overwrite_screenshots на true, чтобы после загрузки новых скриншотов не приходилось вручную удалять старые.

Готовый fastfile можно посмотреть в гитхабе.
🔥3
#ios #xcode

Приятная новость в Xcode 26 RC (ссылка), краткий перевод ниже.

Xcode получил новую функцию кеширования компиляции, которую можно включить вручную и которая ускоряет циклы сборки и тестирования для Swift и C‑подобных языков.
Эта фича сохраняет результаты компиляции для набора исходных файлов и при повторной компиляции тех же файлов использует их из кеша, сокращая время сборки.
Наибольшую выгоду это дает при переключении между ветками или выполнении чистых сборок.


На мой взгляд это здорово, скоро проверим на практике 👍
10
#ios #xcode #appstore #appstoreconnect

Недавно узнал, что версия приложения в поле Version в Xcode на вкладке General не обязана совпадать с версией в App Store Connect.

Нет строгой проверки на соответствие Version между Xcode и App Store Connect — можно прикрепить сборку с версией 999 к версии релиза 1.2, при желании 😱

А вы знали об этом?)
👨‍💻4🔥2
#xcode #bug

В Xcode 26 у меня внезапно сломалась локализация для Info.plist-файла - просто перестали работать строки на русском языке, а на английском все ок.

Почистить кэш, пересоздать файл со строками не помогает.

На скриншоте причина, почему мне завернули очередной релиз приложения с площадками.

Исправляется эта фигня откатом с xcstrings на старый формат strings для локализации Info.plist🙈
😨4❤‍🔥1