Псс, зараз буде трохи недільного weird-контенту. Але можливо комусь стане у нагоді =) Місяців 9 тому створив та опубліковав невеликий пакет, який назвав EigV. EigV надає єдину функцію для обчислення власних значень та векторів матриці (далі "ейгени", нім. EigenVector).Насправді, як Swift-розробники, ви навряд зіткнетеся з ейгенами в більшості випадків. Але, якщо ви захочете пірнути в Page-Rank алгоритм Google, основи ШІ, Марковський процес (дуже рекомендую ознайомитися), та навіть у реальну фізичну, біологічно, чи квантову механіки: обчислення ейгенів - один з фундаментальних кроків. В Python є дуже швидка функція для цього. Нажаль, для Swift я знайшов декілька застарілих бібліотек, що роблять некоректні обчислення. Далі я знайшов вбудовану c-функцію (dgeev_). Вона приймає 14 параметрів, та абʼюзить inout. Я витратив декілька днів на документацію, експерименти, та логіку коррекції уявних значень. Радий поділитися з вами легкою та ефективною функцією, що за грубим розрахунком працює навіть на 33% швидше за Python аналог.Щодо мене, я її використовував саме для реалізації Марковського процесу для задачі з on-device probabilities prediction. Перегнув, чи ще ні? =)------------------------------Я часто пишу і писав різні здебільшого технічні цікавинки на моєму Linkedin. Можеш підписатися, якщо було цікаво =)
Трішки демонстрація, трішки анонс. Ви можете дуже просто підсадити до майже будь-якого додатку (включно з деякими системними) пакет фреймворків, які допоможуть вам дебажити їх, моніторити запити, БД, User Defaults, UI з усіма нюансами, деякі реалізації, тощо. Нашо? Можливості безмежні: від розвідки конкурентів, до пошуку і тестування приватних API; або просто по фану, як на цьому демо =) Як це зробити? Насправді, процес простий, але багатофакторний. І писати про деталі в одному пості буде трохи овер. Якщо стисло: - знаходите необхідний додаток. - збиваєте з нього захист (можна руками, можна через платні сервіси)- збираєте все що хочете запхати у аппку в єдиний фрейм, та пишете obj-c код (небагато) стартер для всього цього.- збираєте динамічну лібу, та пхаєте її у Payload додатку. - перепідписуєте аппку та лібу вашим сертифікатом розробника. Бінго! Без мам, пап, та джейлбрейків - все файно працює. Якщо тема викличе зацікавленість, буду радий розповісти більше та суттєвіше про підхід. * Вибачте саме за цей додаток, але як відомо: "роль кибербезпеки переоцінена". ------------------------------Я часто пишу і писав різні здебільшого технічні цікавинки на моєму Linkedin. Можеш підписатися, якщо було цікаво =)
Чи ти знаєш, як можна легко визначити коли твій додаток знаходиться на ревʼю у команди Apple Review? ось строка коду яка гарантовано (на поточний момент) дозволить тобі визначити ревʼювера на девайсі.ProcessInfo.processInfo.environment["CFNETWORK_DIAGNOSTICS"] != nil
Замість CFNETWORK_DIAGNOSTICS можете використати CFNETWORK_HAR_LOGGING. Зазвичай вони йдуть парами та результат за цими ключами дорівнює 3 (якщо ревʼювер) або nil (якщо звичайний користувач).А тепер трохи мотивації."Нахіба воно мені?"Ну, наприклад, ви хочете сказати "привіт" команді ревʼю, а всім іншим користувачам сказати "дратуті". Було б корисно на свій ризик зробити if-else, чи щось більш хитріше, щоб бути маминим вічливим сонечком, чи не так? Факт у тому, що додаток проходить ревʼю не лише під час "ревʼю", яке ти бачиш в своєму AppStore Connect. Воно точно буде проведене: - через тиждень та 2 тижні після публікації. - при відносно суттєвому зростанню завантажень. - при накопиченні певної (не такої великої) кількості негативних відгуків. - .... і напевно при багатьох інших невідомих інших причинах. Також ревʼю може проводити як людина, так і бот. Тепер трохи мого шляху до цього дивовижного псевдонаукового відкриття.Я знаю ряд міфів, що начебто ревʼювера можна вичислити за IP, гео, типом девайсу. Так, Ірландія, Купертино, iPhone SE або iPad. Це все круто і чудово. Але не завжди і не надійно. Я вирішив перевірити, що збігається а що ні. Я почав перевіряти типи пристрою, тип мережі, та чи наявні на девайсі найпопулярніші додатки (інста, FB, тощо). Гіпотеза була у тому, що ревʼювер не буде користуватися сімкою, та мати на тестовому девайсі соціалки. Використовує і має, фейл. Далі я перевіряв версію системи. Правда в тому, що ревʼювери з перших хвилин мають найновішу iOS. Але це хибна перевірка, бо не свіцдчить ні про що. Далі перевіряв батарею, uptime, опції test-flight та app-store, опції старту. І все хибно на недостовірно. І ось я дійшов до Environment! І ось з релізу в реліз я бачу одну і ту саму картину в аналітиці: параметр логування мережі завжди включений під час відомих мені ревʼю! Бінго! Саме таким чином я побачив, як часто додатки знаходяться під прихованим ревʼю (за 4 місяці 24 рази). Також я майже напевно бачу різницю між ботами та людьми: боти завжди підʼєднанні до Ethernet та мають uptime в декілька (десятків) хвилин. Я часто пишу і писав різні здебільшого технічні цікавинки на моєму Linkedin. Можеш підписатися, якщо було цікаво =)
🐞 Ось таку багу зловив та зарепортив. Swift компілятор не справляється з generic KeyPath.https://github.com/swiftlang/swift/issues/83197Цілью було отримати компайл тайм сейфті, групування по категоріям та автокомпліт.Навіть в простому варіанті падаєenum Resources { enum Category { }}struct Utils { static func resource<ResourceCategory>(_ type: KeyPath<Resources.Type, ResourceCategory.Type>) -> ResourceCategory.Type { Resources.self[keyPath: type] }}func testResourceGetter() { // 👇 This line crashes the compiler. let resource = Utils.resource(\.Category)}
Робочій код був (мав бути) такийstruct Resource { let name: String}enum Resources { enum Category { static let nestedResource = Resource(name: "test") }}struct Utils { static func resource<ResourceCategory>( _ type: KeyPath<Resources.Type, ResourceCategory.Type>, resource: KeyPath<ResourceCategory.Type, Resource> ) -> Resource { ResourceCategory.self[keyPath: resource] }}func testResourceGetter() { // 👇 This line crashes the compiler. let resource = Utils.resource(\.Category, resource: \.nestedResource)}
👩💻 Xcode 26: нові фічі 1. Опціональний Compilation Caching– Дозволяє кешувати результати компіляції Swift та C/C++ файлів.– При повторній компіляції тих самих джерел (наприклад, при переключенні між гілками або clean build) збірка дістає готові артефакти з кешу замість перевираховувати все з нуля.– Активується через нову команду –enable-compilation-caching. 2. #bundle macro– Новий спосіб одразу отримати Bundle вашого таргета.– Жодних хитрувань із Bundle(for:) чи ручними шляхами до ресурсів.👶 3. Next-gen SwiftUI Instrument– Оновлений шаблон у Instruments для SwiftUI.– Збирає тривалість усіх body-апдейтів і малює Cause & Effect Graph, щоб ви чітко бачили, чому і коли ваші в’юшки перерендяться.– Ідеально, щоб виявити «довгі» оновлення і виправити вузькі місця в продуктивності. 4. Type-safe String Catalog Symbols– Тепер Xcode може згенерувати Swift-коди для ключів у .xcstrings.– Увімкнути через Build Setting: Generate String Catalog Symbols. 5. Більш «зрозумілі» краші при nonatomic-конкуренції– Якщо два потоки небезпечно мутують nonatomic властивість Obj-C, сеттери інжектять sentinel 0x400000000000bad0.– Читання цього значення в іншому потоці призведе до крашу з чітким стектрейсом — ви одразу знайдете місце гонки. 6. Покрокове Predictive Code Completion– Тримайте ^ (Control) і приймайте підказку не одразу весь блок, а по «сегментах».– Контрольовані автодоповнення у довгих рядках коду — тепер без зіпсованих форматувань. 7. #endif-анотація– Xcode тепер показує умову #if … праворуч на тій самій лінії, де стоїть #endif.– Зручніше відстежувати вкладені препроцесорні блоки в складних файлах. 8. Explicit Swift Modules за замовчуванням– З Xcode 26 усі Swift-таргети збираються в explicit modules.– Покращує інкрементальні збірки та взаємодію між великими кодовими базами.BWSwift 📱 YouTube 📱 Patreon
Рубрика #проектизкомюнітіВсім привіт! @PavloMoroz96 з другом @aleksandr19_is_88unavailable створили додаток, який допоможе вам не забувати вимикати електроприлади або перевіряти, що ви замкнули двері перед виходом з дому. Це актуально для тих, хто часто повертається додому і хоче перевірити, чи вимкнув він електроприлади.За допомогою цього додатка ви зможете створити локацію, наприклад «Кухня», та встановити нагадування за 5 хв до виїзду з дому, і додаток нагадає вам, що треба зробити фото або відео підтвердження. Таким чином, не перебуваючи вдома, ви завжди зможете перевірити актуальний статус ваших локацій і впевнитися, що все вимкнено, адже в кожній локації буде фото чи відео підтвердження.Це не замінить страхування вашого житла, але ви хоча б будете впевнені, що все, що треба, закрито або вимкнено.Поки нічого архі супер важкого по технологіям, бо це MVP, далі буде 😊👍Будемо вдячні за ваші зірочки. І коментарі з багами в особистих повідомленнях, а не в апсторі 😀) https://apps.apple.com/us/app/leavelight/id6743415996= = = Технічна реалізація: Додаток побудований на архітектурі TCA. Виствлений Swift 6, тож в теорії все потокобезпечно..Бекенд побудований за допомогою Firebase (авторізація Google, Apple, і через Пошту) - по суті зараз ми не використовуємо бекен, але майбутні фічі можуть буди зав'язані на ньому. Для зберігання place ми юзаємо SwiftData (боже, скільки болю було бо багато багів на iOS17, але на iOS18 все ок)Для додавання медіа використовувалась стандартна PhotosUI. Також в додатку використана стандартна UserNotifications для нагадування Підтримання різних мов (дякую велике підписнику цієї групи за додаток https://stringcatalogtranslator.com), без нього б не було азіатських мов 😁Автори також роздає 100 промокодів зі знижкою 50%, пишіть в особисті їм.BWSwift 📱 YouTube 📱 Patreon
👩💻Дайджест Apple новин🏥В Emory Hillandale Hospital в Літона, штат Джорджія, Apple розгорнула свою екосистему пристроїв — Mac, iPhone, iPad та Apple Watch — із повною інтеграцією Epic Systems, що дозволило клініцистам замінити застарілі робочі станції та отримувати мобільний доступ до даних пацієнтів у реальному часі .Завдяки Epic на Mac, MyChart Bedside на iPad та сповіщенням на Apple Watch про критичні результати аналізів адміністративні процеси оптимізовано, що скоротило час на документообіг і відчутно підвищило задоволеність медичного персоналу та пацієнтів.🔐💵 У 2024 році системи протидії шахрайству Apple припинили діяльність понад 146 000 облікових записів розробників, відхилили понад 711 млн потенційно шахрайських реєстрацій користувачів і захистили клієнтів, запобігши більше ніж 2 млрд $ шахрайським платежам, демонструючи багаторівневий підхід до безпеки рахунків, перевірки застосунків та платіжних операцій🛠Apple розширила програму Self Service Repair, додавши підтримку iPad — включно з iPad Air (M2 і новіші), iPad Pro (M4), iPad mini (A17 Pro) та iPad (A16) — та надаючи власникам доступ до офіційних інструкцій, справжніх запчастин, сесій діагностики, інструментів і комплектів для оренди інструментів для заміни дисплеїв, батарей, камер і портів🚀Apple у квітні 2024 року придбала канадський стартап Mayday Labs, як це засвідчило Європейська комісія та пізніше підтвердив засновник Jeremy Bell у видаленому блог‑пості. Mayday Labs створила AI‑календар і менеджер завдань для iPhone, iPad і Mac, який автоматично розставляв події в оптимальний час і навчався вашим щоденним звичкам для подальшої оптимізації розкладу.BWSwift 📱 YouTube 📱 Patreon
🥳 Сьогодні у цього телеграм каналу день народження@bwswift виконується 5 років🎉🙏5 років тому я написав своїм друзям, знайомим і студентам в лічку і попросив підписатися на канал який я стартую. Перший пост в каналі.В перший день зʼявилися перші 32 підписники! 💡Ідея каналу прийшла сама собою, коли мені писали студенти з одними і тим самими запитаннями в лічку, а мені було впадлу відповідати я вирішив оптимізувати відповіді і публікувати їх зразу на всіх. Контент генерувати було дуже просто, тобі пишуть в лічку питання, а ти відповідаєш на них публічно. Цей механізм і досі працює, люди пишуть в лічку, і цікаві теми та знахідки я публікую в каналі.За цей час канал став не просто найбільшим каналом в Україні для iOS розробників, а і обігнав загальні відомі мобільні канали в Україні.💰За весь час канал приніс 0$ доходу і є персональною ініціативою, це мій вклад в розвиток Українського iOS комьюніті.✍️ В минулому році у канала зʼявилися співавтори (завдяки новій фічі телеграма). Дуже дякую @VAndrJ, @alexsaenko, @alex1ong, @rbrovko, @poppyfoxy, @mrbodich, що іноді публікує цікаву інформацію!Дякую кожному з вас, що регулярно ділитися постами зі своїми друзями та колегами і ділитися думками під постами!BWSwift 📱 YouTube 📱 Patreon
💚 Цікавий факт про який неможливо мовчати - “Зелена сукня” Дженніфер Лопес змінила інтернетУ лютому 2000 року на церемонії Grammy Дженніфер Лопес вийшла на сцену в смарагдово‑зеленій сукні від Versace – і це стало справжнім інтернет‑феноменом. Люди по всьому світу шукали фото в Google, але… зображень майже не було. На той час Google видавав лише посилання і не всі з них вели на картинки. На той час цей запит попав в топ 3 за всю історію по популярністю.📸 2001 – Google ImagesЩоб не втрачати трафік на запити “Jennifer Lopez green dress”, Google за рік запустив окремий сервіс пошуку за картинками. Відтоді ми можемо відразу знайти будь‑яку ілюстрацію, не перебираючи текст.🧹 2005 – кнопка “Очистити історію”Незабаром користувачі почали соромитися своїх пошукових запитів (хто ж хвалиться тим, що гуглить папараці‑знімки з червоної доріжки?). Після цього Google додав можливість швидко видаляти історію пошуку – натиснув пару разів, і ніхто не дізнається, що ти дивився.🕵️ 2005 – режим інкогніто.Safari представив Incognito Mode, щоб жодна вкладка не лишалася в історії взагалі. Все через одну сукню, за якою полювали мільйони.Хто б міг подумати, що мода і технології так тісно переплітаються? 😉🗣️ Взагалі «такий контент» надав нам багато технологічних рішень. - Вгадайте які сайти першими розробили і почали використовувати CDN.- Хто першими адаптували свої сайти під смартфони після виходу iPhone.- Модель оплати «підписка» та перші пейволи.- Здогадаєтесь саме якого «контенту» 80% для VR сьогодні?- Ще можна згадати за діпфейк, синтез відео та аудіо. Так, це теж прийшло в маси звідти.BWSwift 📱 YouTube 📱 Patreon
📊 Рейтинг мов програмування згідно TIOBE індексМови програмування Kotlin, Ruby та Swift донедавна займали дуже стабільні позиції в топ-20 в індексі TIOBE. Але тепер вони, здається, втратили тягу. Kotlin і Swift мають одну і ту ж причину, чому вони знижуються. Вони обидва в основному використовуються для однієї конкретної мобільної платформи, Android та iOS, відповідно, тоді як сьогодні є й інші мови та фреймворки для кросплатформної розробки. Так, Swift можна використовувати для розробки Android, але це досить складно. І Kotlin на iOS ніколи насправді не злетів. Рубі - це інша історія. Протягом багатьох років Ruby конкурує з Python та Perl. Поки Perl знижувався, Ruby стабілізувався. Але тепер, коли Python став лінгва франка у світі програмування, для Ruby залишилося не так багато місця.Ще одне цікаве спостереження полягає в тому, що світ мови програмування знаходиться у фазі консолідації. 20 найкращих мов наразі охоплюють 83,56% від загального ринку. Це дуже велика цифра; зазвичай вона становить близько 75%. Це означає, що ринок трохи захисний, віддаючи перевагу перевіреним технологіям перед випробуванням нових технологій.BWSwift 📱 YouTube 📱 Patreon