This is a follow-up to my previous question: How to attribute/credit Apple Fonts added to app?
In that previous post, I misremembered what I did and said I found fonts via macOS' FontBooks, when instead I came acrossUIFont.familyNames. Since these are included via UIKit, the legal implications should be different.
I looked at various license agreements that govern iOS app development but haven't found anything mentioning fonts. Since these are included as part of UIKit, its reasonable to assume that developers are allowed to include these fonts--but in what ways?
Am I allowed to let users create, say, documents with these fonts?
Am I only allowed to display these fonts?
There are 84 fonts, and judging by their FontBook entries, there is a wide range of licenses and restrictions. It seems unnecessarily harsh to have every iOS developer verify each one and figure out which they can legally keep if they want to offer their users access to all (for, say, a text-editing app). There must be some overarching rule that supersedes/encapsulates them, but this rule isn't clear to me after hours of research. I'm not a lawyer, and I don't think Apple expects every app developer to consult their lawyers on whether they can use system fonts.
I'm about to send an email to Apple's legal team (I will post their response here if allowed), but in the meantime I want to hear what other devs think about this.
In Xcode, entering UIFont.familyNames returns the following:
["Academy Engraved LET", "Al Nile", "American Typewriter", "Apple Color Emoji", "Apple SD Gothic Neo", "Apple Symbols", "Arial", "Arial Hebrew", "Arial Rounded MT Bold", "Avenir", "Avenir Next", "Avenir Next Condensed", "Baskerville", "Bodoni 72", "Bodoni 72 Oldstyle", "Bodoni 72 Smallcaps", "Bodoni Ornaments", "Bradley Hand", "Chalkboard SE", "Chalkduster", "Charter", "Cochin", "Copperplate", "Courier New", "Damascus", "Devanagari Sangam MN", "Didot", "DIN Alternate", "DIN Condensed", "Euphemia UCAS", "Farah", "Futura", "Galvji", "Geeza Pro", "Georgia", "Gill Sans", "Grantha Sangam MN", "Helvetica", "Helvetica Neue", "Hiragino Maru Gothic ProN", "Hiragino Mincho ProN", "Hiragino Sans", "Hoefler Text", "Impact", "Kailasa", "Kefa", "Khmer Sangam MN", "Kohinoor Bangla", "Kohinoor Devanagari", "Kohinoor Gujarati", "Kohinoor Telugu", "Lao Sangam MN", "Malayalam Sangam MN", "Marker Felt", "Menlo", "Mishafi", "Mukta Mahee", "Myanmar Sangam MN", "Noteworthy", "Noto Nastaliq Urdu", "Noto Sans Kannada", "Noto Sans Myanmar", "Noto Sans Oriya", "Optima", "Palatino", "Papyrus", "Party LET", "PingFang HK", "PingFang SC", "PingFang TC", "Rockwell", "Savoye LET", "Sinhala Sangam MN", "Snell Roundhand", "STIX Two Math", "STIX Two Text", "Symbol", "Tamil Sangam MN", "Thonburi", "Times New Roman", "Trebuchet MS", "Verdana", "Zapf Dingbats", "Zapfino"]
General
RSS for tagExplore the art and science of app design. Discuss user interface (UI) design principles, user experience (UX) best practices, and share design resources and inspiration.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello! I am developing an ebook reader iOS app that uses c/c++ codec as a page renderer.
The codec uses TrueType as a font rendering engine that requires access to .ttf (or .ttc) files.
Currently, I supply TrueType with fonts embedded in the app package, so they lay within the app sandbox.
The codec supports the whole unicode plane and many languages that ebooks may use, but the fonts I supply don't have some of the important glyphs (i.e. katakana or hangul).
I see that iOS has its own font storage, located in /System/Library/Fonts/ directory. The codec is able to parse this directory and read .ttf files located inside, using these fonts as a fallback in the case when the supplied fonts can't draw certain glyphs.
I use opendir and fopen(in "rb" mode) as a way to read the data, and it works well.
Does this type of access to the system directory violate the sandbox rule for an app distribution, and, if yes, is there a way to get access to stored .ttf files not violating the mentioned rule?
Dear Apple, please make sure this bug gets delivered to whoever is responsible. That's all I ask. Please don't let it sit for months unassigned. This is, by far, the worst bug I've ever found with the macOS wallpaper system.
FB21532401
If you own a 13" 2020 or newer MacBook pro model, set to the default resolution, and are running macOS Tahoe, macOS will significantly degrade the quality of any image set as wallpaper.
When a still image is set as the wallpaper on macOS Tahoe, on some display configurations, the systems downscales the image to an incorrect size, resulting in pixelated wallpaper. The problem is exacerbated by the fact that macOS Wallpaper Agent appears to be using a less than ideal downscaling algorithm, which results in Super Mario Bros’ type pixelation (nearest neighbor) as opposed to any other reasonable modern method (like bicubic.) The issue does not repro on macOS Sequoia.
Every model MacBook we’ve tested offers some resolutions with some form of this problem, but the 13” is the only one where it is notably awful. The most evident default case of this is the 13” MacBook Pro models with a 2560x1600 physical display (for example, 2020 MacBook Pro 13” (17,1.)) These models have a physical display resolution of 2560x1600, and a default scaled resolution of 1440x900. The relationship between the physical resolution and scaled resolution is not an even ratio (1:1 or 2:1), which seems to be the common condition under which this issue occurs.
Repro steps:
Set the systems display resolution to the default resolution - ideally on the model described above (see details on this below)
Set a high resolution image (in this example 5120x2880) as the system wallpaper using any method
Results:
On the model described above, Wallpaper Agent will generate and display a 1440x810 image as the wallpaper. It should be generating and displaying at a minimum of 2560x1600, or more appropriately at 2880x1800 which is the proper 2X resolution. This can be confirmed by viewing the properties of the generated images in the macOS wallpaper cache here:
~/Library/containers/com.apple.wallpaper.agent/Data/Library/Caches/com.apple.wallpaper.caches/extension-com.apple.wallpaper.extension.image
On modern Apple systems, the only situation in which the wallpaper should be generated at 1X is when the physical resolution and set resolution are 1:1. In any situation where the physical resolution is larger than the set resolution, the image should be generated at 2X the set resolution.
As far as we can tell, this issue impacts any format, and any resolution of image, and occurs independent of the set image resolution.
I can't find any documentation on design guidelines for "Login with Game Center" button. My app allows users to "Play as Guest" or "Login with Game Center". Since Apple provides somewhat strict guidelines for designing "Sign in with Apple" button, i was wondering how to design the button for Game Center login. Should i use Game Center icon. And will Apple review reject this?
Hi,
Just want to check is there a requirement for Apple that for App Digital Wallet provisioning that Apple Pay button is not more than 2 taps away from Home Screen?
I'm using .glassEffect(.clear) on a transparent circle over a gradient background. While it's closer to clear than the plain glass effect, it't not really clear, like clear glass. Here is the code. Is there a glass effect that really looks like clear glass?
Circle()
.fill(.clear)
.frame(width: 180, height: 180)
.glassEffect(.clear)
I’m currently using the iOS 26 Developer Beta and noticed the new icon design for the Camera app. Personally, I preferred the previous icon it looked cleaner, more elegant, and felt more in line with Apple’s signature iOS design language.
The new icon feels more like something you’d expect from Android. It lacks the minimalist, refined style that usually defines iOS icons. I understand UI evolves over time, but this change feels like a step away from what makes Apple’s design philosophy unique.
Just wanted to share this honest feedback as a long-time user and developer. Thanks for considering!
Hi everyone,
I’m having trouble getting the new glassEffect() modifier to render correctly in SwiftUI.
No matter what I try, it just appears as a solid white background (instead of translucent glass). This happens both in Beta 1 and Beta 2.
My setup:
• Mac mini (M4 chip)
• macOS 15 Beta 2 (Tahoe)
• Xcode 16 Beta 2
• Samsung Odyssey G9 57” monitor (super ultrawide)
• Using Preview in SwiftUI (not the Simulator)
Even when I use Apple’s default demo code like:
Text("Hello World")
.padding()
.glassEffect()
I'm programming my constraints in my video game, which is working good so far until I ran into my most important interactive storyboard. I have three buttons that move back and forth on the Y position each time they are hit. The buttons Y positions only change to view.safeAreaLayoutGuide.centerYAnchor, constant: 100 or view.safeAreaLayoutGuide.centerYAnchor, constant: 200 or view.safeAreaLayoutGuide.centerYAnchor, constant: 300
The strange part is the button that is in the Y 100 stays visible and I can hit the button that is in the Y 100. The buttons in the Y 200 and Y 300 positions are visible until after one or two hits, then the button that is in Y 300 position disappears, then after another hit or two the button that is in the Y 200 position disappears but the button that is in the Y 100 is still visible.
I cleared all my constraints to narrow it down to clear view of the constraints that is causing the problem. I do not think this Log Noise. Below is the error log:
load_eligibility_plist: Failed to open //private/var/db/os_eligibility/eligibility.plist: Operation not permitted(1)
1
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x302aa7610 UIButton:0x10c257600.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 100 (active)>",
"<NSLayoutConstraint:0x302acb480 UIButton:0x10c257600.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 300 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x302acb480 UIButton:0x10c257600.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 300 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x302aa7750 UIButton:0x10c257900.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 200 (active)>",
"<NSLayoutConstraint:0x302acb5c0 UIButton:0x10c257900.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 100 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x302aa7750 UIButton:0x10c257900.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 200 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x302aa7890 UIButton:0x10c257c00.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 300 (active)>",
"<NSLayoutConstraint:0x302acb700 UIButton:0x10c257c00.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 200 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x302aa7890 UIButton:0x10c257c00.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 300 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
3
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x302aa7610 UIButton:0x10c257600.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 100 (active)>",
"<NSLayoutConstraint:0x302acb480 UIButton:0x10c257600.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 300 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x302acb480 UIButton:0x10c257600.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 300 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x302aa7750 UIButton:0x10c257900.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 200 (active)>",
"<NSLayoutConstraint:0x302acb5c0 UIButton:0x10c257900.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 100 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x302aa7750 UIButton:0x10c257900.centerY == UILayoutGuide:0x3030f0c40'UIViewSafeAreaLayoutGuide'.centerY + 200 (active)>
I have the June 2025 version, but I'd like to find the 2022. There was something removed from the 2022 that I would like to check out.
i am struggling to get my tab view to work, when i call views in the action part of my tab view, my background creates issue? does anyone know how to fix this?
struct ContentView: View {
@Environment(.colorScheme) var colorMode
let Color1: Color = .cyan
var Color2: Color {
colorMode == .dark ? .black : .white
}
var TextColor: Color{
colorMode == .dark ? .black : .black
}
let tax: Double = 0.0875
var OptionTypes: [String] = ["Breakfeast", "Lunch", "Dinner", "Dessert", "Drinks"]
var BreakfeastFoods: [Food] = [
Food(Name: "Eggs Benedict", Price: 9.50),
Food(Name: "Avocado Toast", Price: 5.75),
Food(Name: "French Toast", Price: 12.50),
Food(Name: "Waffles", Price: 7.25),
Food(Name: "Pancakes", Price: 8.60)
]
var LunchFoods: [Food] = [
Food(Name: "Tuna Salad", Price: 11.25),
Food(Name: "Pizza", Price: 22.50),
Food(Name: "Chicken Sandwitch", Price: 8.95),
Food(Name: "French Fries", Price: 5.15),
Food(Name: "Macaroni and Cheese", Price: 7.50)
]
var DinnerFoods: [Food] = [
Food(Name: "Ribeye Steak", Price: 18.99),
Food(Name: "Pork Ribs", Price: 21.75),
Food(Name: "Salmon", Price: 15.00),
Food(Name: "Burrito Bowl", Price: 13.99),
Food(Name: "Chicken Fajitas", Price: 20.50)
]
var DessertFoods: [Food] = [
Food(Name: "Ice Cream Sundae", Price: 10.00),
Food(Name: "Fudge Brownie", Price: 4.85),
Food(Name: "Chocolate Cake Slice", Price: 6.10),
Food(Name: "Pumpkin Pie", Price: 6.10),
Food(Name: "Ice Cream Float", Price: 3.50)
]
var Drinks: [Food] = [
Food(Name: "Water", Price: 0.00),
Food(Name: "Sparkling Water", Price: 2.15),
Food(Name: "Soda", Price: 3.00),
Food(Name: "Coffee", Price: 2.50),
Food(Name: "Hot Chocolate", Price: 3.50)
]
@State var MyCart: [Food] = []
var body: some View {
NavigationStack{
ZStack{
LinearGradient(colors: [Color1, Color2], startPoint: .top, endPoint: .bottom).ignoresSafeArea()
VStack(spacing: 40){
ForEach(OptionTypes, id: \.self){
OptionType in
NavigationLink(value: OptionType){
Text(OptionType)
}.frame(width: 250, height: 70).background(LinearGradient(colors: [.cyan, .white,.cyan], startPoint: .topLeading, endPoint: .bottom)).foregroundStyle(TextColor).cornerRadius(100).font(.system(size: 25, weight: .medium)).padding(.top, 16)
}
}.navigationDestination(for: String.self) {
OptionType in
switch OptionType{
case "Breakfeast":
BreakFeastView(BreakfeastList: BreakfeastFoods, Color1: Color1, Color2: Color2)
case "Lunch":
LunchView(LunchList: LunchFoods, Color1: Color1, Color2: Color2)
case "Dinner":
DinnerView(DinnerList: DinnerFoods, Color1: Color1, Color2: Color2)
case "Dessert":
DessertView(DessertList: DessertFoods, Color1: Color1, Color2: Color2)
case "Drinks":
DrinksView(DrinksList: Drinks, Color1: Color1, Color2: Color2)
// case "My Cart":
// MyCartView(MyCartList: MyCart, Color1: Color1, Color2: Color2)
default:
Text("Error")
}
}
} .navigationTitle("Choose Menu")
TabView{
Tab("Menu", systemImage: "fork.knife"){
}
Tab("My-Cart", systemImage: "cart.fill"){
}
Tab("Store Location", systemImage: "mappin"){
}
}
}
}
}
In the clock app when making an alarm for myself to wake up, I found this bug where If you swipe left On an alarm without deleting it and then Swipe right it does a goofy visual glitch where it teleports to the top of your screen.
I have an ongoing activity in progress.
Think of:
a delivery in progress
house internet reboot in progress
some water / electricity / internet / tv outage.
(food) order processing
I want to show a persistent toast message above the tab bar, across all tabs and screens across the app. It could take 15 minutes until the activity is finished.
Obviously there's a challenge of:
accessibility
content overlaying with each other
extra engineering effort.
What we've thought of doing is:
Option1: show a toast message, but when a modal is presented then it presents on top of the toast message. The toast message no longer updates itself. Once the modal is finished, then the toast message re-appears and continues to update.
Option2: keep the toast message across all tabs and modals and work through the challenges mentioned
Question:
What are some other design approaches that could be taken to persist an ongoing activity (much like 'Live Activity', but just across the app when it's in foreground) or what are some design reasons that the two options considered are bad?
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.
Does iOS 26 support HDR images for app icons to be rendered in High Dynamic Range for Springboard or not?
Hi, I've been trying for an hour to turn the symbols in sf symbols from left to right to right to left, I'd appreciate some help
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.
Hi,
Anybody knows will this occurs when using navigationStack at iOS 18.3? The navigationStack not stay at safeareas
the code as simple as that:
NavigationStack(path: $navManager.path) {
VStack {
Text("Hello")
}
.navigationDestination(for: Route.self) { route in
switch route {
....
}
}
}
.environmentObject(navManager)
.environment(logic)
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…
The problem is the same in all of my applications. To reproduce it, in iOS 26, set the dark mode in the Brightness and display settings and in Accessibility, Display and text size, activate Increase contrast and bold text. With these settings, all the controls will be surrounded by a thin white line. When in the app a keyboard is dispayed, the thin white line does not appears correctly around the keyboard like in the capture joined, it is present on top and partially on bottom but not on sides