Сейчас я думаю, что я на правильном пути, но я столкнулся с, кажется, самой сложной проблемой из всех.
Мое приложение имеет Общее расширение, которое работает в режиме отладки, но не в Режим освобождения. При работе в режиме релиз (компиляция которого занимает около 20–30 минут), когда я нажимаю значок моего приложения на панели общих приложений, панель на мгновение становится серой, а затем возвращается к нормальному цвету, но созданное мной представление не отображается.
Я не уверен, что с этим делать.
- Точки останова не будут работать, поскольку это не отладка и даже в режиме отладки они не работают в расширениях.
- Я дважды проверил подготовку, и все правильно (точно так же, как то, что я использовал для Xamarin).
- Я проверил свои права, общие группы и имена пакетов, все верно.
- Я пытался установить примечания отладки в буфер обмена, но SharedExtensions не поддерживают буфер обмена. доступ
Вот Main app csproj:
Код: Выделить всё
net9.0-ios
Exe
MyApp
true
true
enable
enable
MyApp
com.MyApp.MyApp
1.0
1
12.2
13.1
21.0
10.0.17763.0
10.0.17763.0
6.5
true
false
Apple Development: Created via API (XXXXXXXXXX)
VS: com.MyCompany.MyApp Development
...
...
...
...
...
Код: Выделить всё
net9.0-ios
Library
com.MyCompany.MyApp.ShareExtension
enable
true
13.0
true
full
true
false
Apple Development: Created via API (XXXXXXXXXX)
VS: com.MyCompany.MyApp.ShareExtension Development
Код: Выделить всё
UIDeviceFamily
1
2
UISupportedInterfaceOrientations
UIInterfaceOrientationPortrait
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
UISupportedInterfaceOrientations~ipad
UIInterfaceOrientationPortrait
UIInterfaceOrientationPortraitUpsideDown
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
MinimumOSVersion
12.2
CFBundleDisplayName
MyApp
CFBundleIdentifier
com.MyCompany.MyApp
CFBundleName
MyApp
XSAppIconAssets
Assets.xcassets/appicon.appiconset
UILaunchStoryboardName
LaunchScreen
UIViewControllerBasedStatusBarAppearance
NSExtensionPointIdentifier
com.apple.share-services
CFBundleURLTypes
CFBundleURLName
com.MyCompany.MyApp
CFBundleURLSchemes
shareto
CFBundleTypeRole
None
NSAppleMusicUsageDescription
Select audio file for sheet
NSMicrophoneUsageDescription
Record audio loop
UIBackgroundModes
audio
CFBundleShortVersionString
1.0.001
CFBundleVersion
1
ITSAppUsesNonExemptEncryption
UIFileSharingEnabled
Код: Выделить всё
CFBundleDevelopmentRegion
en
CFBundleDisplayName
MyApp
CFBundleIdentifier
com.MyCompany.MyApp.ShareExtension
CFBundleInfoDictionaryVersion
6.0
CFBundleName
com.MyCompany.MyApp.ShareExtension
CFBundlePackageType
XPC!
CFBundleSignature
????
MinimumOSVersion
13.0
NSExtension
NSExtensionAttributes
NSExtensionActivationRule
NSExtensionActivationSupportsFileWithMaxCount
1
NSExtensionActivationSupportsImageWithMaxCount
1
NSExtensionActivationSupportsMovieWithMaxCount
0
NSExtensionActivationSupportsText
NSExtensionActivationSupportsWebURLWithMaxCount
1
NSExtensionPrincipalClass
CodeBasedViewController
NSExtensionPointIdentifier
com.apple.share-services
CFBundleURLTypes
CFBundleURLName
URL Type 1
CFBundleTypeRole
Editor
CFBundleShortVersionString
1.0.001
ITSAppUsesNonExemptEncryption
CFBundleVersion
001
Буду очень признателен за любые идеи.
ОБНОВЛЕНИЕ 1
Я создал минимальную версию своего общего расширения код.
Та же проблема, работает в отладке, нет в выпуске.
Код: Выделить всё
using System.IO.Compression;
using System.Text;
using System.Web;
using CoreGraphics;
using Foundation;
using Microsoft.Maui.Platform;
using MobileCoreServices;
using UIKit;
namespace ShareExtension.iOS
{
[Register("CodeBasedViewController")]
internal class CodeBasedViewController : UIViewController
{
UILabel lbHeader;
UIView dialog;
public CodeBasedViewController()
{
}
const int Version = 2;
NSString VERSION = new NSString("version");
NSString FILEPATH = new NSString("filepath");
public static Color Grey700 = Color.FromHex("#ff616161");
public static Color Grey800 = Color.FromHex("#ff424242");
public static Color TitleTextColor = Grey700;
public static Color EditorTextColor = Grey800;
public override async void ViewDidLoad()
{
base.ViewDidLoad();
InitUI();
}
void InitUI()
{
//dialog
dialog = new UIView(new CGRect(50, 150, 300, 200));
dialog.BackgroundColor = Colors.GhostWhite.ToPlatform();
dialog.Layer.CornerRadius = 8;
dialog.Layer.MasksToBounds = true;
//header
lbHeader = new UILabel(new CGRect(60, 60, 150, 30));
lbHeader.TextAlignment = UITextAlignment.Left;
lbHeader.BackgroundColor = Colors.Transparent.ToPlatform();
lbHeader.LineBreakMode = UILineBreakMode.WordWrap;
lbHeader.Lines = 0;
lbHeader.Text = "This is a title";
lbHeader.TextColor = TitleTextColor.ToPlatform();
//view
View.AddSubview(dialog);
dialog.AddSubview(lbHeader);
}
}
}
Share Ext не приводит к сбою приложения, поэтому журналы сбоев не создаются, но вот отрывок из журнала другого сбоя, который происходит, когда приложение перемещается в фоновый режим. Не уверен, связано ли это:
Код: Выделить всё
Incident Identifier: 2076FE25-A4BF-45A9-8428-1E74FC70BCA5
Hardware Model: iPhone10,6
Process: MyApp [34247]
Path: /private/var/containers/Bundle/Application/D3520EA3-64C3-43D2-AD4D-1F8F07AF4266/MyApp.app/MyApp
Identifier: com.MyCompany.MyApp
Version: 2.0.462 (462)
AppStoreTools: 16F7
AppVariant: 1:iPhone10,6:16
Beta: YES
Code Type: ARM-64 (Native)
Role: Background
Parent Process: launchd [1]
Coalition: com.MyCompany.MyApp [707]
Date/Time: 2025-08-15 16:23:45.8767 +0800
Launch Time: 2025-08-15 16:21:59.7450 +0800
OS Version: iPhone OS 16.7.11 (20H360)
Release Type: User
Baseband Version: 6.01.01
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x1bdfd940c __exceptionPreprocess + 160 (NSException.m:202)
1 libobjc.A.dylib 0x1b72b5c28 objc_exception_throw + 56 (objc-exception.mm:356)
2 Foundation 0x1b87bd944 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 168 (NSException.m:251)
3 UIKitCore 0x1c037a464 _UIApplicationDrainManagedAutoreleasePool + 260 (UIApplication+AutoreleasePool.m:171)
4 CoreFoundation 0x1be0598e8 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 (CFRunLoop.c:1789)
5 CoreFoundation 0x1bdfe951c __CFRunLoopDoObservers + 552 (CFRunLoop.c:1902)
6 CoreFoundation 0x1be049d7c CFRunLoopRunSpecific + 676 (CFRunLoop.c:3421)
7 UIFoundation 0x1c7b1da70 -[NSHTMLReader _loadUsingWebKit] + 1432 (NSHTMLReader.m:2633)
8 UIFoundation 0x1c7b1e594 -[NSHTMLReader attributedString] + 20 (NSHTMLReader.m:3222)
9 UIFoundation 0x1c7ade150 _NSReadAttributedStringFromURLOrData + 6252 (NSAttributedStringAdditions.m:2750)
10 UIFoundation 0x1c7adc86c -[NSAttributedString(NSAttributedStringUIFoundationAdditions) initWithData:options:documentAttributes:error:] + 144 (NSAttributedStringAdditions.m:1442)
11 MyApp 0x10ece0618 0x1040fc000 + 180241944
12 MyApp 0x105e07a10 0x1040fc000 + 30456336
13 MyApp 0x10e053f4c 0x1040fc000 + 167083852
14 MyApp 0x10976f350 0x1040fc000 + 90649424
15 MyApp 0x1098a8a18 0x1040fc000 + 91933208
16 MyApp 0x10976f350 0x1040fc000 + 90649424
17 MyApp 0x10974bb9c 0x1040fc000 + 90504092
18 MyApp 0x10ef5fa30 0x1040fc000 + 182860336
19 UIKitCore 0x1c00a4afc -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 1360 (UITableView.m:16573)
20 UIKitCore 0x1c007ac08 -[UITableView _updateVisibleCellsForRanges:createIfNecessary:] + 568 (UITableView.m:3144)
21 UIKitCore 0x1bffbdcb0 -[UITableView _updateVisibleCellsNow:] + 1132 (UITableView.m:3286)
22 UIKitCore 0x1bffbd788 -[UITableView layoutSubviews] + 144 (UITableView.m:10618)
23 UIKitCore 0x1bff6f2e8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1932 (UIView.m:18682)
24 QuartzCore 0x1bf47560c CA::Layer::layout_if_needed(CA::Transaction*) + 496 (CALayer.mm:10311)
.
.
.
.
Мне удалось решить две проблемы со сбоями после недели мучительных проб и ошибок.
Одной из них был сбой при запуске, вызванный JetBrains Rider. Как только я переключился на генерацию ipa в VS Code, сбой при запуске прекратился.
Что касается сбоя в фоновом режиме, это было вызвано ListViews, как вы можете видеть в UITableViews в журнале сбоев выше. Я преобразовал их все в CollectionViews, и с тех пор сбоев не было.
Однако, возвращаясь к исходной проблеме, ShareExtension по-прежнему не работает.
Есть идеи?
ОБНОВЛЕНИЕ 4
Дальнейшее тестирование показывает, что сбой по-прежнему происходит даже с CollectionView.
Итак, теперь я снова вернулся к двум проблемам.
Я старался сохранять хладнокровие в этих сообщениях, но, честно говоря, за последние несколько недель я потратил 95 % своего времени на попытки исправить проблемы или создать обходные пути для проблем с платформой Maui и связанными с ней инструментами, а 5 % времени — на кодирование самого приложения.
Это огромная трата времени.
Мои часы ушли на то, чтобы выяснить, почему мой компьютер не подключается к моему Mac, почему мое приложение работает в Visual Studio в режиме отладки, но не в выпуске, почему оно работало вчера, а не сегодня, почему выходные данные сборки иногда гаснут в середине сборки и ничего больше не происходит, почему элементы управления внезапно перестают работать, и выясняю, что это обновление Maui nuget, которое я сделал неделю назад, сломало их, почему при переключении на VS Code на Mac его не удается развернуть на устройство, почему VS Code иногда не может даже очистить мой проект, почему при работе с Rider он может развернуться на устройстве, но не может создать IPA, который не дает сбоя, почему ListViews, работающие на Android, не работают на iOS, почему при переключении с ListView на CollectionView, элемент управления с меньшим количеством функций, чем тот, который он должен заменить, код по-прежнему аварийно завершает работу с ошибками HTML в метках, даже если в коде нет HTML.
Развитие на самом деле не в этом. Мы, разработчики, не на это подписываемся. Мы подписываемся, чтобы писать приложения, а не писать исправления для фреймворков, на которых они созданы.
Проблемы и негатив в отношении разработки Мауи, которые можно прочитать на бесчисленных веб-сайтах и блогах, не являются преувеличением. Это правда. Развитие Мауи — это кошмар.
Подробнее здесь: https://stackoverflow.com/questions/797 ... n-maui-ios
Мобильная версия