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.

Learn about designing great app and game experiences

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

CarPlay navigation issue, maximum depth
Hi everyone, I am working on a CarPlay integration, and need open a two level list opened from a root template. However, I am always receiving an error message when opening the 2nd pushed template. To narrow it down not to have an issue with some app specific code I created the CarPlay scene below. I am aware that there is a limit, but two levels I understand are supported on all CarPlay integrations, the maximum seems to be 5. The app is just crashing right after showing the 2nd template. Any ideas? Any hints are much appreciated. Thanks a lot! Regards, Michael class CarPlaySceneDelegate2: UIResponder, CPTemplateApplicationSceneDelegate { // [...] private func createRootTemplate() -> CPListTemplate { let pushToAItem = CPListItem(text: "Push to Template A", detailText: "Level 1 → Level 2") pushToAItem.handler = {[weak self] (pushToAItem, completion) in guard let self = self else { completion() return } self.interfaceController?.pushTemplate( self.pushTemplateA(), animated: true, completion: { (didPresent, error) in completion() } ) } let section = CPListSection(items: [pushToAItem]) let template = CPListTemplate(title: "Root Template", sections: [section]) return template } private func pushTemplateA() -> CPListTemplate { let pushToBItem = CPListItem(text: "Push to Template B", detailText: "Level 2 → Level 3") pushToBItem.handler = {[weak self] (pushToBItem, completion) in guard let self = self else { completion() return } self.interfaceController?.pushTemplate( self.pushTemplateB(), animated: true, completion: { (didPresent, error) in completion() } ) } let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root") backToRootItem.handler = { [weak self] _, completion in self?.interfaceController?.popToRootTemplate(animated: true, completion: nil) completion(); } let infoItem = CPListItem(text: "Current Depth", detailText: "2 (Template A)") let stackCountItem = CPListItem( text: "Stack Count", detailText: "\((interfaceController?.templates.count ?? 0) + 1)" ) let section = CPListSection(items: [pushToBItem, backToRootItem, infoItem, stackCountItem]) let template = CPListTemplate(title: "Template A", sections: [section]) return template } private func pushTemplateB() -> CPListTemplate { let pushToCItem = CPListItem(text: "Push to Template C", detailText: "Level 3 → Level 4") pushToCItem.handler = {[weak self] (pushToCItem, completion) in guard let self = self else { completion() return } self.interfaceController?.pushTemplate( self.pushTemplateC(), animated: true, completion: { (didPresent, error) in completion() } ) } let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root") backToRootItem.handler = { [weak self] _, completion in self?.interfaceController?.popToRootTemplate(animated: true, completion: nil) completion() } let popOneItem = CPListItem(text: "Pop One", detailText: "Go back to Template A") popOneItem.handler = { [weak self] _, completion in self?.interfaceController?.popTemplate(animated: true, completion: nil) completion() } let infoItem = CPListItem(text: "Current Depth", detailText: "3 (Template B)") let stackCountItem = CPListItem( text: "Stack Count", detailText: "\((interfaceController?.templates.count ?? 0) + 1)" ) let section = CPListSection(items: [pushToCItem, popOneItem, backToRootItem, infoItem, stackCountItem]) let template = CPListTemplate(title: "Template B", sections: [section]) return template } private func pushTemplateC() -> CPListTemplate { let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root") backToRootItem.handler = { [weak self] _, completion in self?.interfaceController?.popToRootTemplate(animated: true, completion: nil) completion() } let popOneItem = CPListItem(text: "Pop One", detailText: "Go back to Template B") popOneItem.handler = { [weak self] _, completion in self?.interfaceController?.popTemplate(animated: true, completion: nil) completion() } let infoItem = CPListItem(text: "Current Depth", detailText: "4 (Template C)") let stackCountItem = CPListItem( text: "Stack Count", detailText: "\((interfaceController?.templates.count ?? 0) + 1)" ) let section = CPListSection(items: [popOneItem, backToRootItem, infoItem, stackCountItem]) let template = CPListTemplate(title: "Template C", sections: [section]) return template } }
2
0
1.6k
1w
Plagiarism
Hello. I've made a shape in the app which looks like the hello sign on apple products at startup. Is this considered plagiarism, or is it acceptable to use it in an app? P.s: i've used Path for it and drawed it with curves
2
0
721
Feb ’25
Requirements for application functions that use some WeatherKit data
Hi there I have developed an offline algorithm for calculating tides, which works based on the built-in database of tidal stations in some regions. The algorithm works correctly and the results match the real data. I would like to receive and add moon data from Weather Kit to the algorithm for performance improvement experiments. What requirements do I need to apply to the application so that I can use data from Weather Kit in my algorithm ?
Topic: Design SubTopic: General
1
0
75
Jun ’25
Preventing Content Cutoff in Sheets
I’m working on a SwiftUI sheet that has a specific size 624 x 746, but I’m running into issues on certain devices like the iPad mini in landscape or when using Stage Manager. The sheet sometimes gets cut off, and the content inside isn’t fully visible. Current Implementation: The sheet is 624 x 746, but if there's less width or height around the sheet, I want it to scale dynamically while maintaining the aspect ratio (to ensure the content can always be shown) Ideally, I’d love for the sheet to increase in size on larger screens to cover more of the page behind it. The sheet contains a NavigationStack with multiple pages. Problems I’m Facing: iPad mini (landscape): The bottom content (like buttons) gets cut off when the sheet height is constrained. Stage Manager: If the user resizes the window, the sheet doesn’t adjust properly, leading to UI clipping. Ideal behavior: I want the sheet to dynamically scale its width and height while maintaining the aspect ratio. Questions How can I prevent content from being cut off when using the sheet in iPad mini landscape? Is there a better approach to handle Stage Manager resizing dynamically? Any insights or alternative approaches would be greatly appreciated! 🚀 Also, I’m a designer, and I’m doing this to help our development team—so please bear with my code 😅 Thanks in advance! 😊
Topic: Design SubTopic: General
1
0
662
Feb ’25
About tvOS Material (design resource)
I noticed a discrepancy between the Material specifications for tvOS on the Developer page and the naming in the Design Resources (Sketch files). Which one should we consider authoritative? https://developer.apple.com/design/human-interface-guidelines/materials
1
0
104
Apr ’25
ios 18
i accidentally updated my iphone with the ios 18 and i dislike it. the emoji display were too huge and the picture gallery was kinda messy. i hope apple could fix this by bringing back the old emoji display and the gallery settings.
Topic: Design SubTopic: General
1
0
489
Feb ’25
Keyboard dismissed when switching apps
Scenario is when keyboard is opened within the app being developed then switch to other app, for instance, Notes app and create a note to enable keyboard from there. While the Notes app keyboard is active switch back to the developed app the keyboard in it is dismissed. Any thoughts?Thanks
1
0
94
Apr ’25
iPhone screen glare
Feedback for iPhone and iPad – Display Technology Dear Apple Team, Currently, the mainstream display technology used in iPhone and iPad is OLED. However, OLED panels produce significant PWM flickering, which strongly irritates the human eye. Many users, especially in China, experience eye strain, tearing, and discomfort after using OLED devices for a period of time. There is a large group of users here who are highly sensitive to screen flicker and therefore cannot use OLED-based devices at all. What they truly need is an eye-friendly device with either LCD or flicker-free Mini-LED display technology. I sincerely recommend that Apple consider offering iPhone and iPad models with LCD or Mini-LED panels. Such displays could provide better eye comfort, no flicker, and a healthier experience. Currently, almost no smartphone manufacturers in China provide such options, and even if they do, their devices often come with outdated chipsets and cannot be used as a reliable daily driver. This presents a valuable opportunity for Apple: by addressing this demand, Apple could attract a unique customer base, increase sales, and even justify a slightly higher price, as many customers would be willing to pay more for the sake of their eye health. In the Chinese market, a truly flicker-free iPhone or iPad would be incredibly rare and highly desired. Thank you for considering this suggestion. I truly hope Apple will take this into account.
Topic: Design SubTopic: General
1
0
361
Aug ’25
Always use new animation in Stage Manager, why not?
The brand new animation in Stage Manager greatly reduced dizziness. However, don’t know why it ONLY applies when no window was presented. What would be the problem elsewhere? Stage Manager is one of pretty few motion pictures that annoyed me and forced me to turn on Reduce Motion, or stop using Stage Manager. Big pity… macOS 26.0 (25A5346a) wont use ipad to post…
Topic: Design SubTopic: General
1
0
692
Sep ’25
Getting original LocationNode from hit tested SCNNode
I would like to modify the content of a published LocationNode upon been clicked by the user. But unfortunately: func hitTest(_ point: CGPoint, options: [SCNHitTestOption : Any]? = nil) -> [SCNHitTestResult] returns an SCNNode array from which it is impossible to retrieve the original LocationNode being inserted in order to be able to modify it. Of course the solution would be to either insert the SCNNode corresponding to the inserted LocationNode in a custom class or conversely insert the identifier of the custom object as a tag of the LocationNode, in order to solve the issue. But both options seem impossible to implement. May anyone help me?
1
0
110
Apr ’25
Liquid Glass App Icons without Icon Composer
We have found that on iOS 26 beta some of our app icons built from an Xcode 16 asset catalog containing a single 1024x1024 .png file have a Liquid Glass effect applied to them while others have not. The documentation states that If you choose not to use Icon Composer, you can still use an AppIcon asset catalog in your project containing individual app icon images and let the system apply the Liquid Glass material. and If you prefer, you can take advantage of the system’s automatically generated treatment that is applied to all app icons. Is there any insight into how the system treats app icons that have not yet been updated with Icon Composer?
1
1
2.2k
Nov ’25
NFC innovation
Existing smartphones store multiple NFC card information. When the NFC antenna of the phone is close to the card reader, it is usually necessary to open the APP to select NFC card information or default to one card information to be transmitted to the card reader. It is not possible to quickly select or switch cards among multiple cards. For example, after using the NFC function to swipe the subway card, the phone needs to open the car access control and community access control again. It is necessary to open the mobile NFC card information management APP to select the community access control card and then swipe the mobile NFC access control, which causes inconvenience. (现有的智能手机存储多个 NFC 卡信息。当手机的NFC天线靠近读卡器时,通常需要打开APP选择NFC卡信息或默认一个卡信息传输到读卡器。无法在多张卡之间快速选择或切换卡。例如,使用NFC功能刷完地铁卡后,手机需要重新打开车内门禁和小区门禁。需要打开手机NFC卡信息管理APP选择社区门禁卡,然后刷手机NFC门禁,造成不便。) Divide the smartphone screen into multiple areas, and users can freely define corresponding NFC information for each area. When the screen is turned off and not unlocked, select NFC card information by pressing different screen areas with your fingers. When the mobile NFC is close to the card reader, the selected card information will be transmitted to the reader(将智能手机屏幕划分多个区域,每个区域手机用户可以自由定义对应NFC信息。在熄屏’不解锁的情况下,通过手指按压不同屏幕区域选择NFC卡片信息,手机NFC贴近读卡器时将选择的卡片信息传递给读卡器。) Below, the method will be further explained in conjunction with the accompanying drawings and embodiments. Figure 1 is a schematic diagram of a utility model; Figure 2 is the flowchart of the present utility model; NFC reader, 2. Mobile screen partition, 3. NFC signal in Figure 1. In Figure 2, 1. Press the area of the screen partition with your finger. 2. Place the phone close to the NFC reader. 3. The phone senses the returned NFC signal. 4. The phone detects the pressed area.( 下面结合附图和实施例对方法进一步说明。 图1为实用新型示意图; 图2为本实用新型流程图; 图1中1.NFC读取器,2.手机屏幕分区,3.NFC信号。 图2中1.手指按压屏幕分区的区域2.手机贴近NFC读取器3.手机感应到返回的NFC信号4.手机检测到按压的区域,5.是否检测到手机用户按压区域的动作,6.检测到按压区域,根据按压区域做出匹配相对应的NFC的动作7.选择用户所需的NFC卡8.NFC卡收到信息并发出卡片信息9.NFC读卡器收到NFC卡的信息。) For example, a smartphone user has N NFC virtual cards in their phone. Users can divide the smartphone screen into N areas, distinguished as A area, B area, C area..., each area controls different NFC. When a smartphone user holds down the B area that controls NFC (such as virtual access cards) and brings the phone close to the NFC card reader (such as access control). The mobile phone will sense NFC signals (access control signals), triggering the phone to detect the area that the user is pressing. There are two possibilities. Firstly, if the user's pressing action is not detected, the NFC card corresponding to the default A zone (set as the default here) will be selected. If the user's pressing action is detected and it is detected that the pressing is in Zone B (the partition corresponding to the access card), then the NFC information corresponding to Zone B is triggered. The smartphone receives this message, and the corresponding NFC sends out a card message. The NFC card reader (access control device) receives the message and reacts (door opens).(例如,一智能手机用户手机中有N个NFC虚拟卡。用户可以将智能手机屏幕分为N个区域,分辨为A区、B区、C区······,每个区域分别控制不同的NFC。当智能手机用户按住控制NFC(如虚拟门禁卡)的B区域并将手机靠近NFC读卡器(如门禁)。手机将会感应到NFC信号(门禁信号),触发手机检测用户正在按压的区域。有两种可能性,第一没有检测到用户的按压动作则选择默认的A区(这里把A区设为默认)所对应的NFC卡。第二检测到用户的按压动作并检测出按压的是B区域(门禁卡所对应的分区),则触发B区域所对应的NFC信息。智能手机收到此信息,相对应的NFC发出卡片信息,NFC读卡器(门禁设备)收到信息,做出反应(门打开)。) 图1 image1 图2 image2
Topic: Design SubTopic: General
1
0
402
Sep ’25
Make default Standby clock
Is there any way to lock the clock in Standby so it doesn't change? It is so frustrating when I put the phone on the charger and have to scroll back and forth, trying to find the clock I would like to use all the time.
Topic: Design SubTopic: General
1
0
587
Feb ’25
13 Years Old App Gets Guideline 4.3(a) - Design - Spam Rejection
Our application was first published on December 16, 2012, at 11:42 PM, and has been available on the market for 13 years. Over the years, we have implemented hundreds of updates to enhance and refine the app. Our recent updates are rejected for the reason "Guideline 4.3(a) - Design - Spam" warning. How can it be for a 13 years old app. Please advice me what to do. Thanks in advance
Topic: Design SubTopic: General
1
1
863
Feb ’25
WebView some of fonts became too small on ios 18.4 and on latest safari
Below is the sample css code where I render a web page in my webview screens fonts became too small after 18.4 and its so hard to read when I launch my app . Any workarounds to address this issue .sg-labels-canvas { font-size: 15px; display: flex; flex-direction: column; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Roboto, sans-serif; font-style: normal; }
Topic: Design SubTopic: General
1
0
99
Apr ’25
Error creating the CFMessagePort needed to communicate with PPT. Type: Error | Timestamp: 2025-02-10 13:43:41.450089-06:00 | Process: junk removal app | Library: UIKitCore | Subsystem: com.apple.UIKit | Category: PPT | TID: 0xf185c
I have completed a code with chatgpt and I am unising the latest version of code. i am also using an m1 MacBook air (2020). would love to know if anyone have resolved this issue. by using the ai to correct the code it disrupts it with something. an incorrect imoout line,but after multiple attempts ai get it right. I have notice that the code shows up on the start meaning run, take some time to load the intro page.
Topic: Design SubTopic: General
1
0
668
Feb ’25