По правилам Apple это ок по нажатии на кнопку показывать popup с текстом типа «Эта фича доступна в полной версии» и кнопкой «Скачать в AppStore»? Я сравниваю с Android Instant Apps и там это норм.
Круто, а по ссылкам в статье не должен срабатывать App Clips из Safari? Написано по URL должен срабатывать но на iOS 14.3 не работает. Попробовал из этой статьи medium.com/the-innovation/an-explanation-and-demo-of-app-clips-dd3b84b16297 и тоже самое а вот по QR коду сработало. Похоже по URL вообще не работает.
Интересует будет ли возможность экспорта дневника в форме для показа врачу неврологу и будет ли это вообще иметь смысл? Как пример, интересно что будут показывать часы для человека у которого сейчас мигрень с аурой + постепенное немение конечностей. Было бы здорово если бы получилось какое никакое а описание протекающего процесса мигрени.
Вот это идея! Для меня это очень актуально, у неврологов только один способ лечения: не нервничать, возможно такой девай бы мне помог. + ведение дневника будет как раз кстати. Надеюсь на скорейшую готовность продукта).
Ну все-же плюсы CoreData очень полезны и для меня: автоматическая миграция, визуальное создание таблиц, простое оперирование с объектам и их связями между собой (автоматическая подгрузка при обращении к ним). С CoreData я думаю все-же проще работать. Я вообще не рассматривал чистый SQLite подход, возможно стоит попробовать), сразу сказать сложно.
В моем случае объектов может быть сколько угодно и размер базы зависит от пользователя. По сути это список который мне нужно отображать в одном контроллере, обрабатывать добавление (по мере загрузки данных), удаление и пейджинацию. Manager работающий с базой хранит все методы чтобы сохранить в нее NSObject объекты и взять их. Внутри эта работа проецируется на CoreData запросы которые выполняются на одной queue через dispatch_async поэтому fault-ов не происходит. Контекст в итоге всего один, с ним я в потоке и работаю. Пейджинация происходит как вызов метода у manager-а c указанием необходимого диапазона записей, данные приходят в переданный completionBlock-e. Данные сортируются по дате. Если где-то добавляется объект в manager то он нотифицирует об этом передавая обернутый объект после записи в базу. Про статью не уверен, вроде все тут уместилось).
Не могу понять почему так популярны такие сложные структуры с контекстами в CoreData для работы в разных потоках. К примеру приведенная в этой статье или еще круче: stackoverflow.com/questions/21476559/coredata-child-contexts-nsfetchedresultscontroller-and-main-thread. Я считаю что обращаться к CoreData можно только в фоновом потоке. Простая модель позволяет минимизировать что делается под капотом, чтобы было легче контролировать объемы используемой памяти и cpu. Да, NSFetchResultController я не использую.
Работа с базой у меня идет через отдельный объект. Прочтенные Entity из базы котвертируются в NSObject производные объекты c теми-же полями и передаются в главный поток уже с помощью делегата или нотификации. Там они уже отображаются в кастомном UI (типа collectionView).
Буду рад комментариям по поводу моего подхода работы с CoreData.
я тоже xib-ы использую, помоему хорошо так уменьшают объем кода, огорчает отсутствие стилей, если надо поменять шрифт, то надо менять его во всех xib-ах руками
На каждый json объект создавать класс это имхо как-то сурово. Когда мне понадо бился маппер, я нашел github.com/mystcolor/JTObjectMapping и не сожалею)
нда на реальном проекте Objective-C код не парсится, выдает
com.deadmeta4.cpd.generated.TokenMgrError: Lexical error at line 2431, column 40. Encountered: «x» (120), after: "\"\\"
at com.deadmeta4.cpd.generated.ObjCParserTokenManager.getNextToken(ObjCParserTokenManager.java:6164)
at com.deadmeta4.cpd.generated.ObjCParser.getNextToken(ObjCParser.java:7720)
at net.sourceforge.pmd.cpd.ObjectivecTokenizer.tokenize(ObjectivecTokenizer.java:31)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:106)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:72)
at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:82)
at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:67)
at net.sourceforge.pmd.cpd.CPD.main(CPD.java:180)
хмм после сборки вашего проекта где все в одном, такая ошибка:
/Users/alexeyglushkov/Library/Developer/Xcode/DerivedData/CPDObjective-C-ctrzamaffxvjuyakuvbyxlzmddyw/Build/Intermediates/CPDObjective-C.build/Debug/CPDObjective-C.build/Script-E456D4A114E35BF7000D003F.sh: line 12: 2361 Segmentation fault: 11 ${BUILT_PRODUCTS_DIR}/CPDObjective-C -cpd-xml "${FULL_PATH_TO_CPD_XML_OUTPUT}"
Command /bin/sh failed with exit code 139
Работа с базой у меня идет через отдельный объект. Прочтенные Entity из базы котвертируются в NSObject производные объекты c теми-же полями и передаются в главный поток уже с помощью делегата или нотификации. Там они уже отображаются в кастомном UI (типа collectionView).
Буду рад комментариям по поводу моего подхода работы с CoreData.
com.deadmeta4.cpd.generated.TokenMgrError: Lexical error at line 2431, column 40. Encountered: «x» (120), after: "\"\\"
at com.deadmeta4.cpd.generated.ObjCParserTokenManager.getNextToken(ObjCParserTokenManager.java:6164)
at com.deadmeta4.cpd.generated.ObjCParser.getNextToken(ObjCParser.java:7720)
at net.sourceforge.pmd.cpd.ObjectivecTokenizer.tokenize(ObjectivecTokenizer.java:31)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:106)
at net.sourceforge.pmd.cpd.CPD.add(CPD.java:72)
at net.sourceforge.pmd.cpd.CPD.addDirectory(CPD.java:82)
at net.sourceforge.pmd.cpd.CPD.addRecursively(CPD.java:67)
at net.sourceforge.pmd.cpd.CPD.main(CPD.java:180)
и куча т.д. и т.п. Буду репортить автору.
NSError * error;
на
NSError * error = nil;
ибо иначе мы попадаем в if и [error localizedDescription] по мусорному адресу с катастрофическими последствиями)
/Users/alexeyglushkov/Library/Developer/Xcode/DerivedData/CPDObjective-C-ctrzamaffxvjuyakuvbyxlzmddyw/Build/Intermediates/CPDObjective-C.build/Debug/CPDObjective-C.build/Script-E456D4A114E35BF7000D003F.sh: line 12: 2361 Segmentation fault: 11 ${BUILT_PRODUCTS_DIR}/CPDObjective-C -cpd-xml "${FULL_PATH_TO_CPD_XML_OUTPUT}"
Command /bin/sh failed with exit code 139
а вообще в презентации с WWDC неплохо все объяснили