👍4🔥1
#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).👌5❤1
#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
Как бы вы оценили свой опыт и понимание работы с Makefile в iOS-разработке?
Anonymous Poll
55%
Не доводилось слышать о Makefile, не знаю, что это такое
21%
Знаю (имею представление) об этом, но не приходилось использовать
13%
Доводилось иногда использовать, но знаний и опыта мало
9%
Уверенно использую для автоматизации несложных задач
2%
Владею темой на экспертном уровне, пишу сложные сценарии и оптимизирую процессы
#terminal #bundler #rbenv #hint
Кто читал предыдущую статью про использование
И после перезапуска терминала не работают команды
При этом если выполнять команды из
Вот что нужно сделать, чтобы эти настройки не сбрасывались.
1. Выполните в терминале по очереди эти две команды:
2. Затем примените изменения командой:
3. Всё! Теперь
Это безопасно:
-
- Добавление строк в
- Все ваши проекты будут использовать именно ту версию
Если захотите убрать эти настройки, просто откройте файл
После этого сохраните файл и выполните:
Всё вернётся как было 👌
Кто читал предыдущую статью про использование
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
Всё вернётся как было 👌
👌2❤1
Нужно переименовать сразу несколько файлов, а еще - изменить габариты сразу нескольких картинок (ширину/высоту). Сможешь сделать это без единой строчки кода на маке (и без терминала)?
Anonymous Poll
26%
Да
74%
Нет
❤1
easy_dev991
Нужно переименовать сразу несколько файлов, а еще - изменить габариты сразу нескольких картинок (ширину/высоту). Сможешь сделать это без единой строчки кода на маке (и без терминала)?
This media is not supported in your browser
VIEW IN TELEGRAM
#finder #macos #hint
Как изменить габариты сразу нескольких картинок (ширину/высоту) на
1. Выделяем нужные картинки
2. Открываем с помощью "Просмотр"
3. Выделяем все (
4. Инструменты -> Настроить размер
Как изменить габариты сразу нескольких картинок (ширину/высоту) на
MacOS:1. Выделяем нужные картинки
2. Открываем с помощью "Просмотр"
3. Выделяем все (
command + A)4. Инструменты -> Настроить размер
👍5🔥2😁1
struct ComplexModel {
let name: String
let id: Int
let price: Double
let isActive: Bool
let creationDate: Date
let websiteURL: URL?
let tags: [String]
let statistics: [String: Int]
let denoscription: String?
}
/// Выполнить работу с массивом и вернуть отсортированный массив
func doWork(with items: [ComplexModel]) -> [ComplexModel] {
// другая логика ...
return items.sorted(by: { $0.name < $1.name })
}🫡2
easy_dev991
struct ComplexModel { let name: String let id: Int let price: Double let isActive: Bool let creationDate: Date let websiteURL: URL? let tags: [String] let statistics: [String: Int] let denoscription: String? } /// Выполнить…
Нужно сделать сортировку без замыкания и знаков "больше"/"меньше" стандартными средствами, не создавая никаких экстеншенов и кастомных методов
Anonymous Poll
21%
Знаю как это сделать
30%
Догадываюсь как сделать
49%
Не знаю как сделать
❤1👍1
easy_dev991
struct ComplexModel { let name: String let id: Int let price: Double let isActive: Bool let creationDate: Date let websiteURL: URL? let tags: [String] let statistics: [String: Int] let denoscription: String? } /// Выполнить…
#swift #foundation #keypath #hint
Представляю вам KeyPathComparator, доступный с iOS 15.
Решает задачу из опроса на изи)
Представляю вам KeyPathComparator, доступный с iOS 15.
Решает задачу из опроса на изи)
struct ComplexModel {
let name: String
let id: Int
let price: Double
let isActive: Bool
let creationDate: Date
let websiteURL: URL?
let tags: [String]
let statistics: [String: Int]
let denoscription: String?
}
/// Выполнить работу с массивом и вернуть отсортированный массив
func doWork(with items: [ComplexModel]) -> [ComplexModel] {
// другая логика ...
return items.sorted(using: KeyPathComparator(\.name)) // <- вот
}
/// Выполнить работу с массивом и вернуть отсортированный массив
/// - Parameters:
/// - items: Изначальный массив
/// - order: Порядок сортировки
/// - Returns: Отсортированный массив
func doSortedWork(with items: [ComplexModel], order: SortOrder) -> [ComplexModel] {
// другая логика ...
return items.sorted(using: KeyPathComparator(\.name, order: order))
}
Apple Developer Documentation
KeyPathComparator | Apple Developer Documentation
A comparator that uses another sort comparator to provide the comparison of values at a key path.
👍4🔥2