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

GitHub: https://github.com/easydev991
Download Telegram
#git #terminal #hint #gitignore

Бывает, в гит запушили файл, которого там не должно быть, а потом добавили его в .gitignore. Но файл уже находится в гите, и его нужно оттуда удалить.

Чтобы файл корректно удалился из гита с учетом новых правил игнора, достаточно выполнить эти две команды в терминале в папке с проектом:


git rm -rf --cached .
git add .


Пояснение:
- первая команда говорит гиту перестать отслеживать все файлы в проекте, но не удалять их с диска
- вторая команда снова добавляет все файлы и изменения в список для включения в следующий коммит, но теперь уже с учётом .gitignore (то есть файлы, которые вы исключили, не попадут в список)
- остается только сделать коммит/пуш с изменениями 👌

Для экспертов по гиту:
Знаю, что можно проделать операции только с нужным файлом, а не со всеми сразу, но мне удобнее так, и вдруг кому-то тоже 😉
5🔥2
#ios #appstoreconnect

Интересное наблюдение про публикацию приложений

1. Вчера отправил на проверку два пет-проекта с разных аккаунтов разработчика с разницей в 3 часа
2. Сегодня оба приложения одновременно приложения перешли в статус "Проверка"
3. Проверка завершилась в том же порядке, в котором я отправлял приложения, но с разницей не в 3 часа, а в 14 минут
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
#terminal #simulator #hint

По умолчанию нажатия на экране iOS-симулятора не отображаются, но это легко поправить командой в терминале:

defaults write com.apple.iphonesimulator ShowSingleTouches 1

После выполнения команды нужно перезагрузить симулятор и нажатия будут отображаться.

Важный нюанс: если включить запись экрана симулятора через кнопку Record Screen в самом симуляторе, то в получившейся записи не будут видны эти нажатия.

Нажатия будет видно только при записи экрана самого мака (видео можно обрезать, чтобы было похоже на запись через Record Screen)
🔥72🤔1
#ios #appstoreconnect

Самая быстрая проверка перед публикацией в AppStore за более чем 30 релизов - меньше часа с момента отправки на проверку до аппрува 🚀

И это в выходной день 😯
🔥5
#ios #appstoreconnect

Обычно после статуса "Одобрено" идет "Готово к распространению".

Ошибка аппстора или им так понравилась сборка, что одобрили дважды? 😅
😁2👍1
#terminal #git #hint

Бывает, что после выполнения задачи ветку удаляют в репозитории, а локально она все еще висит. И когда таких веток набирается много, можно в них запутаться 😅

Чтобы удалить разом все такие ветки, нужно перейти в терминале в папку с проектом и выполнить команду:

git branch | grep -v "^\*" | while read branch; do
if ! git show-ref --verify --quiet refs/remotes/origin/$branch; then
git branch -D $branch
fi
done


Объяснение:
git branch выводит список всех локальных веток.
grep -v "^\*" исключает текущую активную ветку (чтобы не удалять её).
• Для каждой ветки проверяется, существует ли она на сервере (refs/remotes/origin/branch).
• Если ветка отсутствует на сервере, она удаляется принудительно (git branch -D), что удалит ветку даже если в ней есть несмерженные изменения.

Перед выполнением команды нужно убедиться, что вы переключились на ветку, которую не хотите удалять (например, main или master).
👌51
#ios #swift #swiftui #binding #bug

Как сломать Xcode 16.3, чтобы в логах не было нормального описания ошибки:

import SwiftUI

struct BreakSwiftExample: View {
@State private var isOn = false
private var isOnBinding: Binding<Bool> {
.init(
get: { isOn },
set: changeToggle // не собирается
// set: { isOn = $0 } // собирается
)
}

var body: some View {
Toggle("Демо-тоггл", isOn: isOnBinding)
}

private func changeToggle(_ value: Bool) {
isOn = value
}
}


Результат: Command SwiftCompile failed with a nonzero exit code
2👍2🔥1
#xcode #bug

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

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

Кто читал предыдущую статью про использование Makefile, и при этом впервые применил эти команды, скорее всего после перезапуска терминала столкнулся с ошибкой типа такой:

Could not find ‘bundler’ (2.6.5) required by your Gemfile.lock. (Gem::GemNotFoundException)


И после перезапуска терминала не работают команды bundle*, например: 

bundle exec fastlane


При этом если выполнять команды из Makefile, то такой ошибки нет, потому что внутри основных команд есть обертки для настройки окружения и прочих штук, которые сбрасываются после перезапуска терминала.

Вот что нужно сделать, чтобы эти настройки не сбрасывались.

1. Выполните в терминале по очереди эти две команды:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc


2. Затем примените изменения командой:

source ~/.zshrc


3. Всё! Теперь rbenv всегда будет работать автоматически, когда вы открываете терминал в папке проекта с файлом .ruby-version.

Это безопасно:
- rbenv специально разработан так, чтобы работать для каждого проекта отдельно, если в проекте есть файл .ruby-version
- Добавление строк в ~/.zshrc просто включает автоматическое переключение версий Ruby для каждого проекта, но не фиксирует какую-то одну версию Ruby глобально
- Все ваши проекты будут использовать именно ту версию Ruby, которая указана в их собственном .ruby-version.

Если захотите убрать эти настройки, просто откройте файл ~/.zshrc (например, командой nano ~/.zshrc или через Finder) и удалите строки:

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"


После этого сохраните файл и выполните:

source ~/.zshrc


Всё вернётся как было 👌
👌21
#news #wwdc25

Обычно я не публикую новости с WWDC, но перед этим не устоял.

Обещают, что загрузка проектов будет до 40% быстрее в новой версии Xcode 😱

Конечно, можно придраться к слову "до", но все же.
И еще, Xcode будет весить на 24% меньше, и это тоже хорошо)

Видос с обзором всех новых штук тут.
🔥6