ErrorNil. iOS-разработка
688 subscribers
298 photos
60 videos
17 files
332 links
Пишем код, разрабатываем приложения, учимся

Сайт школы https://error-nil.namari.ru/
YouTube https://www.youtube.com/@errornil
VK Видео - https://vk.com/video/@errornil

По всем вопросам пишите мне @ibatyrgereev
Download Telegram
1. Создание своего шаблона

Перейти в директорию


~/Library/Developer/Xcode


Затем создать новый путь


/Templates/File Templates/Custom/


И внутри создать папку


CleanViewController.xctemplate
где CleanViewController любое название


Внутри этой папки создать два файла:
- ___FILEBASENAME___.swift и добавить нужный код, к примеру:


final class ___FILEBASENAME___: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
}
}


- TemplateInfo.plist


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

<key>Description</key>
<string>Clean UIViewController</string>

<key>Kind</key>
<string>Xcode.IDEFoundation.TextSubstitutionFileTemplateKind</string>

<key>MainTemplateFile</key>
<string>___FILEBASENAME___.swift</string>

<key>Platforms</key>
<array>
<string>com.apple.platform.iphoneos</string>
</array>

</dict>
</plist>


2 - Своя шапка для всех файлов

- Перейти в директорию


~/Library/Developer/Xcode/UserData/


- Создать файл IDETemplateMacros.plist

- Добавить содержимое
-

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://apple.com">
<plist version="1.0">
<dict>
<key>FILEHEADER</key>
<string>Любой текст</string>
</dict>
</plist>


Доступные константы

___DATE___ — Текущая дата (например, 20.05.2024).
___YEAR___ — Текущий год.
___ORGANIZATIONNAME___ — Название организации (указано в настройках проекта).
___FILENAME___ — Имя создаваемого файла.
___USERNAME___ — Имя пользователя Mac.
🔥10❤6
Откликнуться, вдруг повезет
⚡12🔥8🤣6👍1
Media is too big
VIEW IN TELEGRAM
Смысла мало, зато бесплатно)

Полноценный локальный, БЕСПЛАТНЫЙ LLM.

Редкий кейс, но под определенные задачи все равно можно использовать, к примеру, при разработке, чтобы проверить конечную интеграцию с OpenAI API и не тратить токены
⚡8❤3👍3🔥1💯1
📱 Начинаем новый цикл разработки.

В этот раз приложения со списком покупок.

По традиции анонс и в дальнейшем этапы разработки будут выходить на канале, можно поддержать одним лайком 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤7⚡2💯2🔥1
не спрашивайте
🤣22🔥8
И код для кастомного Layout из видео


struct FlowLayout: Layout {
var spacing: CGFloat = 12

func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize {
let maxWidth = proposal.width ?? .infinity
var rowWidth: CGFloat = 0
var rowHeight: CGFloat = 0
var totalHeight: CGFloat = 0

for subview in subviews {
let size = subview.sizeThatFits(.unspecified)
if rowWidth + size.width > maxWidth, rowWidth > 0 {
totalHeight += rowHeight + spacing
rowWidth = size.width + spacing
rowHeight = size.height
} else {
rowWidth += size.width + spacing
rowHeight = max(rowHeight, size.height)
}
}
totalHeight += rowHeight
return CGSize(width: maxWidth, height: totalHeight)
}

func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
var x = bounds.minX
var y = bounds.minY
var rowHeight: CGFloat = 0

for subview in subviews {
let size = subview.sizeThatFits(.unspecified)
if x + size.width > bounds.maxX, x > bounds.minX {
x = bounds.minX
y += rowHeight + spacing
rowHeight = 0
}
subview.place(at: CGPoint(x: x, y: y),
anchor: .topLeading,
proposal: ProposedViewSize(size))
x += size.width + spacing
rowHeight = max(rowHeight, size.height)
}
}
}
❤7
Golden Gate
⚡4
Умная Siri, опять?
👍11
Ну зато кастомизацию голоса завезли, эмейзинг
⚡6
Мне интересно, сколько им платят, за такие "искренние" улыбки
🤣9
Короче своя гугл камера, в andriod это есть с прошлого года
❤3
Инглиш фор старт
🤣6
Есть подозрение, что если вырубать по дереву каждый раз, когда произносят Apple Intelligence, то к концу презентации наступит экологическая катастрофа
🤣13
Серьезно, сколько??
🤣6
В общем тотали
❤4⚡2
Даешь Gemini в Xcode
👍3
В общем Даби Даби ДиСи (как Тим Кук говорит) максимально проходная, я в моменте и забыл, что сегодня новые оси вообще то показали (27 уже), основной акцент на AI и в частности Siri AI, но это уже традиция последних презентаций (правда Гугл в этом плане не переплюнуть).

В моменте я просто считал количество улыбающихся "неподдельной" улыбкой людей, наверное тоже показатель.

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

Бетка доступна уже завтра, но обновляйтесь на свой страх и риск, я конечно не советую
👍7