Explore the art and science of app design. Discuss user interface (UI) design principles, user experience (UX) best practices, and share design resources and inspiration.

All subtopics

Post

Replies

Boosts

Views

Activity

Apple Watch logo requirements for app's notifications
I have an iPhone/iPad application for which there is no watchOS target and as such no separate Watch app. I do not have separate watchOS app icons included as well in Assets. However, an Apple Watch is supposed to receive push notifications for the application. Do we as app developers need to provide watchOS app icons, with different resolutions as suggested by Apple in HIG, in app's Assets for the app logo to appear properly in the notification coming in watch, for both short look and long look? As of now, my app's icon appear pixelated in short look and I am not sure whether it is an app icon issue or because I did not include watchOS app icons in Assets.
2
0
467
Oct ’24
Implementing multiple Model Containers
Hi, When using just one model container, I have the following code: let modelContainer: ModelContainer init() { do { entriesModel = try ModelContainer(for: Model.self) } catch { fatalError("Could not initialize ModelContainer") } } I am attempting to implement two like so: let model1: ModelContainer let model2: ModelContainer init() { do { model1 = try ModelContainer(for: Model1.self) model2 = try ModelContainer(for: Model2.self) } catch { fatalError("Could not initialize ModelContainer") } } var body: some Scene { WindowGroup { ContentView() .modelContainer(model1) .modelContainer(model2) } } However, when in the Views that I'd like to implement I don't know how to declare the models. I tried this: @Environment(\.model1) private var model1 @Query private var data: [Model1] But I get the error: Cannot infer key path type from context; consider explicitly specifying a root type How do I implement multiple model containers in multiple different views?
2
0
425
Oct ’24
iOS 17 and Order TipKit Tips
Hello, I've been trying to imagine how to support ensuring the display of my tips in the order I want them to for iOS 17. I am familiar with the TipGroup iOS18 feature, but I'm looking to control the order without TipGroup so I can deliver a great user experience in my iOS 17 and > app. I've tried lots of theories, but can't seem to figure it out and I don't see anyone else having solved it. Any ideas/code examples anyone could point me to? Thanks!
0
2
360
Oct ’24
Using MatterSupport framework to add Matter device to our system
1, I add an Matter extension named TRMatterExtension, using the Template in Xcode. 2, check the InfoPlist with the TRMatterExtension module, I see the NSExtension key with two key which are like this: 3,The RequestHandler.swift file is like this: import os import MatterSupport let logger = Logger(subsystem: "com.airdroitech.commissionMtr2", category: "MatterExtension") // The extension is launched in response to MatterAddDeviceRequest.perform() and this class is the entry point // for the extension operations. class RequestHandler: MatterAddDeviceExtensionRequestHandler { override init() { logger.log("QAWI3 - init") super.init() } override func validateDeviceCredential(_ deviceCredential: MatterAddDeviceExtensionRequestHandler.DeviceCredential) async throws { // Use this function to perform additional attestation checks if that is useful for your ecosystem. logger.log("QAWI3 - validateDeviceCredential") } override func selectWiFiNetwork(from wifiScanResults: [MatterAddDeviceExtensionRequestHandler.WiFiScanResult]) async throws -> MatterAddDeviceExtensionRequestHandler.WiFiNetworkAssociation { // Use this function to select a Wi-Fi network for the device if your ecosystem has special requirements. // Or, return `.defaultSystemNetwork` to use the iOS device's current network. logger.log("QAWI3 - Returning default system network") return .defaultSystemNetwork } override func selectThreadNetwork(from threadScanResults: [MatterAddDeviceExtensionRequestHandler.ThreadScanResult]) async throws -> MatterAddDeviceExtensionRequestHandler.ThreadNetworkAssociation { // Use this function to select a Thread network for the device if your ecosystem has special requirements. // Or, return `.defaultSystemNetwork` to use the default Thread network. return .defaultSystemNetwork } override func commissionDevice(in home: MatterAddDeviceRequest.Home?, onboardingPayload: String, commissioningID: UUID) async throws { // Use this function to commission the device with your Matter stack. logger.log("QAWI3 - Starting commissioning flow") } override func rooms(in home: MatterAddDeviceRequest.Home?) async -> [MatterAddDeviceRequest.Room] { // Use this function to return the rooms your ecosystem manages. // If your ecosystem manages multiple homes, ensure you are returning rooms that belong to the provided home. return [.init(displayName: "Living Room")] } override func configureDevice(named name: String, in room: MatterAddDeviceRequest.Room?) async { // Use this function to configure the (now) commissioned device with the given name and room. } } 4, I add Privacy - Local Network Usage Description and Bonjour services [ _matter._tcp _matterc._udp _matterd._udp ] to the main target's InfoPlist. 5, click a button to call MatterAddDeviceRequest.perform(), the code is as the following: let homes = [MatterAddDeviceRequest.Home(displayName: "TRHome")] let topology = MatterAddDeviceRequest.Topology(ecosystemName: "TR", homes: homes) let request = MatterAddDeviceRequest(topology: topology) do { try await request.perform() print("Successfully set up device!") } catch { print("Failed to set up device with error: (error)") } 6, Result: Most times, Matter devices can be added to the KeyChain and the commission window of the Matter device could be opened. But sometimes the MatterSupport window will show "Pairing Failed". The total error is: [1E1D8753] Failed to perform Matter device setup setup: Error Domain=HMErrorDomain Code=18 "Pairing Failed" UserInfo={HFErrorUserInfoOptionsKey={ HFErrorUserInfoOptionDescriptionKey = "Pairing Failed"; HFErrorUserInfoOptionTitleKey = "\U65e0\U6cd5\U6dfb\U52a0\U914d\U4ef6"; }, NSLocalizedDescription=Pairing Failed, NSUnderlyingError=0x3009e8240 {Error Domain=HAPErrorDomain Code=15 "Failed to pair Matter Accessory in time" UserInfo={NSLocalizedDescription=Failed to pair Matter Accessory in time, NSUnderlyingError=0x3009e86c0 {Error Domain=HAPErrorDomain Code=24 "(null)"}}}}. From the log I can see, the Function selectWiFiNetwork(from wifiScanResults: [MatterAddDeviceExtensionRequestHandler.WiFiScanResult]) async throws -> MatterAddDeviceExtensionRequestHandler.WiFiNetworkAssociation of the RequestHandler.swift file will be called and commissionDevice(in home: MatterAddDeviceRequest.Home?, onboardingPayload: String, commissioningID: UUID) will NOT called. Sometimes the RequestHandler class will not be called at all, this means the first function validateDeviceCredential will not be called. But ,when this happens, the iPhone will Continuously can NOT add device for a long time, sometimes it gets better inexplicably. Even under normal circumstances, the probability of successfully adding a device is less than 50% and very slowly. When using Apple Home app, the success rate is very high, almost 100%, and very fast. So, can you help me identify where the problem is and what areas need attention? Thank you very much! Finally, I often encounter logs like this: nw_browser_dns_service_browse_callback [B3] not in ready or waiting state Do you know what it means and whether it will affect the equipment distribution network? My testing machine is iPhone 12, operating on iOS 18 and above 17.0. Thank you very much!
3
0
299
Sep ’24
Icon for Journals Suggestions API
My app includes use of the new journal suggestions API. I'd like to know what is the official icon for the button in my app which bring up the .journalingSuggestionsPicker Another app, DayOne uses the icon attached. Is this the official icon? If yes, does it have a SFSymbols name? Developer support were unable to help me. Any help appreciated - many thanks
4
0
348
Sep ’24
Background modes in Flutter project (Android Studio)
Hello, I'm developing an iOS app in Flutter, but I'm having trouble enabling Background Mode. I added the following configuration to Info.plist and Runner.entitlements: <key>UIBackgroundModes</key> <array> <string>processing</string> <string>fetch</string> <string>location</string> </array> However, the Background Mode option doesn't appear in my App ID to be enabled. And the build fails with the message: Provisioning profile "Ready Response ios_app_store ..." doesn't include the UIBackgroundModes entitlement. How can I enable this option in my App ID? Note: I'm using Android Studio and publishing through Codemagic.
2
0
432
Sep ’24
Should my app use Apple's in-app purchase (b2b app)?
Hi, Our application is a B2B app, supporting users from companies that own our equipment (print industry). We want to allow company stakeholders to have a "Premium Plan" that will provide their company with numerous advantages in different aspects (service, training, data visibility) Some features in our app will be locked/hidden if the company is not part of the Premium Plan. We want to allow authorized users to activate the Premium plan for their entire company. We already have our website, where we already have a marketplace that allows web users to do this (using their company service agreement). In term of complying with Apple's in-app purchase Policy, is it ok to tell users in the app to go to this marketplace if they want these features (and more)? Thank you
1
0
267
Sep ’24
MapAnnotation Position
I am working on a MapView with MapAnnotation on the Map and am having difficulty getting the MapAnnotation to function properly when selected. In my code, I want the MapAnnotation selected to be to the front if it is behind or partially blocked by another annotation. I have tried using a zIndex but this does not appear to work. Below is my MapView code along with a screenshot of the issue. Any help would be greatly appreciated. struct HospitalMapView: View { @StateObject var viewModel = HospitalViewModel() @State private var showSearchView = false @State private var showListView = false @State private var selectedTab: Int = 0 var body: some View { ZStack { VStack(spacing: 0) { TopTabView() // Map that updates the visible hospitals when the user moves or adjusts the map Map(coordinateRegion: $viewModel.region, interactionModes: .all, annotationItems: viewModel.filteredHospitals) { hospital in MapAnnotation(coordinate: CLLocationCoordinate2D(latitude: hospital.latitude, longitude: hospital.longitude)) { RoundedRectangle(cornerRadius: 40) .fill(viewModel.colorForPercentile(viewModel.calculatePercentile(for: hospital, in: viewModel.filteredHospitals))) .frame(width: 70, height: 30) // Maintain consistent size, adjust if necessary .overlay( Text("$\(Int(hospital.baseCharge / 1000))K") .foregroundColor(.white) .bold() ) .overlay( RoundedRectangle(cornerRadius: 40) .stroke(Color.blue, lineWidth: viewModel.selectedHospital == hospital ? 3 : 0) ) .onTapGesture { viewModel.selectHospital(hospital) // Move the selected hospital to the end of the list to bring it to the front viewModel.bringHospitalToFront(hospital) viewModel.showBottomSheet = true } .scaleEffect(viewModel.selectedHospital == hospital ? 1.1 : 1.0) // Highlight the selected hospital .zIndex(viewModel.selectedHospital == hospital ? 1 : 0) // Set the zIndex higher for the selected hospital .animation(.easeInOut, value: viewModel.selectedHospital) // Smooth transition } } .onAppear { // Initial update of visible hospitals when the map appears viewModel.updateFilteredHospitals() } .onChange(of: viewModel.region) { _ in // Update the visible hospitals as the user changes the map region viewModel.updateFilteredHospitals() } .edgesIgnoringSafeArea(.all) } // Hospital count display hovering over the map Text("\(viewModel.filteredHospitals.count) Hospitals") .font(.subheadline) .foregroundColor(.white) .padding(8) .background(Color.black.opacity(0.6)) .cornerRadius(10) .padding(.top, -315) // Adjust padding to position correctly below the TopTabView .zIndex(1) // Ensure it's above the map if let selectedHospital = viewModel.selectedHospital, viewModel.showBottomSheet { BottomSheetView(isOpen: $viewModel.showBottomSheet, maxHeight: UIScreen.main.bounds.height * 0.3) { SummaryTabView(selectedHospital: Binding( get: { selectedHospital }, set: { newValue in viewModel.selectHospital(newValue) } )) } .transition(.move(edge: .bottom)) .animation(.spring()) } } .safeAreaInset(edge: .bottom) { BottomTabView(selectedTab: $selectedTab, showListView: $showListView, showSearchView: $showSearchView, onSearchSelected: { showSearchView = true showListView = false }, onHomeSelected: { showSearchView = false showListView = false }, onListSelected: { showListView = true showSearchView = false }) } .fullScreenCover(isPresented: $showSearchView) { SearchView(viewModel: viewModel, showSearchView: $showSearchView, selectedTab: $selectedTab, showListView: $showListView) } .fullScreenCover(isPresented: $showListView) { ListView(selectedTab: $selectedTab, showListView: $showListView, showSearchView: $showSearchView) .environmentObject(viewModel) } .environmentObject(viewModel) } }
0
0
236
Sep ’24
App swiftui no funciona en ios 18
Hola, cree una app en swiftui, la version minima de ios 16.2, la desarrolle en xcode 15 sin problema, funcionaba hasta ios 17 sin inconvenientes, actualice a xcode 16 ahora que la ejecuto en ios 18 presenta problemas en varios elementos de la interfaz, por ejemplo cuando toco un boton no desencadena una acción inmediata, tengo que sostener el toque en el boton para que reaccione y asi varios elementos que necesito tocar para llamar una acción, probe la app y funciona correctamente en dispositivos con ios desde el 16.2 al 17, intente modificar el código de los elementos para mejorar el gesto de tocar, pero no funciona, no se porque pasa esto en IOS 18, alguna sugerencia para resolver esto, gracias.
1
0
263
Sep ’24
New ios 18 update
Hi apple I love the new update but one thing that bothers me is that when we are customizing the app colors it only lets us do the black or white background for it and in order to do that your whole phone has to be on light or dark mode. id like to make a suggestion to let us change the background and logo on the app. thank you
0
0
239
Sep ’24
iOS 18 Underlined Feature 😭
Dear Apple, I’m loving the IOS 18 update so fa; everything is awesome. However could you please takeoff the underlined feature. It’s makes text so difficult to look at and disrupts the simplistic nature of an iPhone. 🥹😭🙏
2
0
217
Sep ’24
Is it possible to display three lines within a row of a list view
Following is a row item within a section of CPListTemplate, CPListItem(text: "Station 1", detailText: "Details\nforStation 1") In the above, is it possible to display data in three lines? I have seen couple of CarPlay apps that do it within a list. However, I am not sure how this can be done. Kindly suggest some ideas Currently I have the below, I want to achieve the below, three lines with a row
1
0
182
Sep ’24
iOS 18 dark mode
Hello, I am a UI designer. I am trying to modify our app's icon to accommodate Apple's iOS 18 dark mode. Our app icon is quite complex in shape, making it difficult to recognize in dark mode. Is it okay if the shape differs slightly between light mode and dark mode? Or should I just change the color?
0
0
294
Sep ’24
Improvement to Future IPhones and Apple Watches
It would be a great innovation to incorporate a Card Reader into both iPhones and Apple Watches. The user could open the card reader app on his watch or phone, enter the amount to be paid into his nominated bank account (eg £15) ready for the purchaser/customer to tap his card to make the contactless payment. It would simplify my everyday life enormously because I hardly ever carry cash these days.
1
0
248
Sep ’24
[iOS 18] Is there an SF Symbol of the new icon in Safari's address bar?
The following icon has been introduced in Safari's address bar for iOS 18: I’d like to use it in my app to guide users on how to enable my Safari extension, but I couldn’t find it in SF Symbols beta 6.0 (99). Is this because it’s still in beta and will be available for third-party use later, or is it a private icon that only Apple can use? I hope I just overlooked something.
1
0
382
Sep ’24
iOS 18 Photo Gallery
Who on Earth okayed this new photo gallery design? I can’t find anything, scrolling is not smooth, there’s a bunch of content categories I will literally never view that I can’t remove from the gallery, this is EXTREMELY frustrating. How can I revert back to iOS 17?
1
0
336
Sep ’24