My apple app rejected on 9 of July 2025 but I didn't recieve any confirmation on mail can you please provide any written confirmation why my mail is not approved with all possibe conditions.
Create elegant and intuitive apps that integrate seamlessly with Apple platforms.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
Does anyone have any documentation for how to achieve the floating search tab item in UIKit apps that use UITabBarController?
The Liquid Glass UIKit video had code for minimizing the tab bar on scroll down, but I didn't see anything on keeping the search button locked to the bottom trailing edge (as in this screenshot below).
Someone smarter than me please tell me if this will work... I want to have an edit screen for a SwiftData class. Auto Save is on, but I want to be able to revert changes. I have read all about sending a copy in, sending an ID and creating a new context without autosave, etc.
What about simply creating a second set of ephemeral values in the actual original model. initialize them with the actual fields. Edit them and if you save changes, migrate that back to the permanent fields before returning.
Don't have to manage a list of @State variables corresponding to every model field, and don't have to worry about a second model context.
Anyone have any idea of the memory / performance implications of doing it this way, and if it is even possible? Does this just make a not quite simple situation even more complicated? Haven't tried yet, just got inspiration from reading some medium content on attributes on my lunch break, and wondering if I am just silly for considering it.
Hello! I’m excited to see that Look to Scroll has been included in visionOS 26 Beta. I’m aiming to achieve a feature where the user’s gaze at a specific edge automatically scrolls to that position. However, I’ve experimented with ScrollView and haven’t been able to trigger this functionality. Could you advise if additional API modifiers are necessary? Thank you!
I am trying to create a menu picker for two or three text items. Small miracles, but I have it basically working. Problem is it uses a set, and I want to pass arrays. I need to modify PickerView so the Bound Parameter is an [String] instead of Set. Have been fighting this for a while now... Hoping for insights.
struct PickerView: View {
@Binding var colorChoices: Set<String>
let defaults = UserDefaults.standard
var body: some View {
let possibleColors = defaults.object(forKey: "ColorChoices") as? [String] ?? [String]()
Menu {
ForEach(possibleColors, id: \.self) { item in
Button(action: {
if colorChoices.contains(item) {
colorChoices.remove(item)
} else {
colorChoices.insert(item)
}
}) {
HStack {
Text(item)
Spacer()
if colorChoices.contains(item) {
Image(systemName: "checkmark")
}
}
}
}
} label: {
Label("Select Items", systemImage: "ellipsis.circle")
}
Text("Selected Colors: \(colorChoices, format: .list(type: .and))")
}
}
#Preview("empty") {
@Previewable @State var colorChoices: Set<String> = []
PickerView(colorChoices: $colorChoices)
}
#Preview("Prefilled") {
@Previewable @State var colorChoices: Set<String> = ["Red","Blue"]
PickerView(colorChoices: $colorChoices)
}
My Content View is suppose to set default values the first time it runs, if no values already exist...
import SwiftUI
struct ContentView: View {
@State private var viewDidLoad: Bool = false
var body: some View {
HomeView()
.onAppear { // The following code should execute once the first time contentview loads. If a user navigates back to it, it should not execute a second time.
if viewDidLoad == false {
viewDidLoad = true
// load user defaults
let defaults = UserDefaults.standard
// set the default list of school colors, unless the user has already updated it prior
let defaultColorChoices: [String] = ["Black","Gold","Blue","Red","Green","White"]
let colorChoices = defaults.object(forKey: "ColorChoices") as? [String] ?? defaultColorChoices
defaults.set(colorChoices, forKey: "ColorChoices")
}
}
}
}
#Preview {
ContentView()
}
PickLoader allows you to dynamically add or delete choices from the list...
import SwiftUI
struct PickLoader: View {
@State private var newColor: String = ""
var body: some View {
Form {
Section("Active Color Choices") {
// we should have set a default color list in contentview, so empty string should not be possible.
let defaults = UserDefaults.standard
let colorChoices = defaults.object(forKey: "ColorChoices") as? [String] ?? [String]()
List {
ForEach(colorChoices, id: \.self) { color in
Text(color)
}
.onDelete(perform: delete)
HStack {
TextField("Add a color", text: $newColor)
Button("Add"){
defaults.set(colorChoices + [newColor], forKey: "ColorChoices")
newColor = ""
}
}
}
}
}
.navigationTitle("Load Picker")
Button("Reset Default Choices") {
let defaults = UserDefaults.standard
//UserDefaults.standard.removeObject(forKey: "ColorChoices")
let colorChoices: [String] = ["Black","Gold","Blue","Red","Green","White"]
defaults.set(colorChoices, forKey: "ColorChoices")
}
Button("Clear all choices") {
let defaults = UserDefaults.standard
defaults.removeObject(forKey: "ColorChoices")
}
}
}
func delete(at offsets: IndexSet) {
let defaults = UserDefaults.standard
var colorChoices = defaults.object(forKey: "ColorChoices") as? [String] ?? [String]()
colorChoices.remove(atOffsets: offsets)
defaults.set(colorChoices, forKey: "ColorChoices")
}
#Preview {
PickLoader()
}
And finally HomeView is where I am testing from - to see if binding works properly...
import SwiftUI
struct HomeView: View {
//@State private var selection: Set<String> = []
//@State private var selection: Set<String> = ["Blue"]
@State private var selection: Set<String> = ["Blue", "Red"]
var body: some View {
NavigationStack {
List {
Section("Edit Picker") {
NavigationLink("Load Picker") {
PickLoader()
}
}
Section("Test Picker") {
PickerView(colorChoices: $selection)
}
Section("Current Results") {
Text("Current Selection: \(selection, format: .list(type: .and))")
}
}
.navigationBarTitle("Hello, World!")
}
}
}
#Preview {
HomeView()
}
If anyone uses this code, there are still issues - buttons on Loader don't update the list on the screen for one, and also dealing with deleting choices that are in use - how does picker deal with them? Probably simply add to the list automatically and move on. If anyone has insights on any of this also, great! but first I just need to understand how to accept an array instead of a set in pickerView.
I have tried using a computed value with a get and set, but I can't seem to get it right.
Thanks for any assistance! Cheers!
Hi all,
After upgrading to the iOS 26 beta, the scrolling in my SwiftUI chat view is completely broken. The exact same code works perfectly on iOS 18.
Context:
I have a chat view using ScrollViewReader and a vertically-reversed ScrollView (with .rotationEffect(.degrees(180))). Each message row (MessageBubble) uses multiple simultaneousGesture handlers:
Horizontal drag for swipe-to-reply (and other actions: pin, delete)
Long press for showing popover/actions
Vertical scroll for normal chat scrolling
This was working great on iOS 18. In iOS 26 beta, the vertical scroll is either completely disabled, jittery, or hijacked by the message row’s drag gestures, even though .simultaneousGesture is used (see code below).
Minimal Repro Sample
MessageListView.swift
swift
Copy
Edit
ScrollViewReader { proxy in
ScrollView(.vertical, showsIndicators: false) {
LazyVStack(spacing: 0) {
// ... grouped messages
ForEach(...) { ...
MessageBubble(...) // see below
}
Color.clear.frame(height: 8).id("BOTTOM_ANCHOR")
}
.padding(.horizontal, 4)
.rotationEffect(.degrees(180))
}
.rotationEffect(.degrees(180))
}
MessageBubble.swift
struct MessageBubble: View {
// ...
var body: some View {
// horizontal swipe-to-reply gesture
let dragGesture = DragGesture(minimumDistance: 10)
// ...
ZStack {
// ...
HStack { ... }
// ...
.simultaneousGesture(
DragGesture(minimumDistance: 0) // for long press
// ...
)
.simultaneousGesture(dragGesture) // for horizontal swipe
}
// ...
}
}
Hello Apple App Review Team,
We are using Privy to enable sign in with Farcaster in our app. Privy is a 3rd party authentication SDK, and it currently opens the authentication URL using the system browser.
Unfortunately, this behavior is handled internally by Privy and we do not have access or control to override it in order to present the sign-in flow in-app using SFSafariViewController.
We understand the importance of maintaining a seamless and secure user experience, and we fully support the use of SFSafariViewController or ASWebAuthenticationSession. However, since Privy does not expose an option to change this behavior at the moment, we are limited by their current implementation.
We have reached out to the Privy team requesting a change or improvement that would allow us to use SFSafariViewController instead of the external browser. In the meantime, we would appreciate your guidance on how to proceed, or whether an exception could be granted due to this 3rd party SDK limitation.
Thank you for your understanding and support.
Hi everyone,
I’m testing our SwiftUI app on both Xcode simulator and a real iPhone. On the simulator, everything looks clean and aligned. But when I run it on an actual iPhone (same build, iOS 18), the layout looks broken—fonts overlap, spacing is off, and elements are misaligned.
Both screenshots are from the exact same screen and time. First is simulator, second is iPhone.
Any idea why this difference happens? Is there something I should check in terms of rendering or layout settings?
Thanks in advance!
iOS 26 Beta 3 finally introduced an API for the clear variant of Liquid Glass. But is there any way to switch system controls like the NavigationController back button or UIBarButtonItems to clear? They do not accept an effect like UIEffectView, and they do not have a configuration property like UIButton.
I am creating 500 textfield widgets and then updating them and all their 40 properties at once. I require to update all 500 widgets with their properties at once as it is a usecase in our app, so pooling and showing only those that will be on screen won't really help in this case.
I have found that for updating all these 500 textfield widgets with their 40 properties, the time taken is 80 to 100 milliseconds.
However, if I update the non-string properties like .text, then it comes down to half which is 40 to 50 milliseconds.
Wanted to know if there was a far more quicker or optimized way to do this?
The following snippet of code shows what I am doing:
@objc private func handleImmediateMode() {
let startTime = CFAbsoluteTimeGetCurrent()
for (index, textField) in retainedInputFields.enumerated() {
updateAllProperties(for: textField, index: index)
}
let endTime = CFAbsoluteTimeGetCurrent()
print("Immediate Mode -- (500 fields, 40 props): \( (endTime - startTime) * 1000) ms")
}
In the above code, I have already created the 500 textfield widget, and then in updateAllProperties () function I am passing the textfield widget to it and then updating the 40 properties that the widget has.
Particularily, the following properties:
textField.placeholder = "Input Field (index)"
UILabel().text
Seem to be adding the extra 40 - 50 milliseconds.
SwiftUI.List allows for customization using .listItemTint, .tint, or .foregroundStyle. This can be used to color individual items in the list, other than the app's specified accent color.
Is there an equivalent feature to customize individual Tab's icon or label, when using TabView's SidebarAdaptableTabViewStyle, and its in the sidebar style.
From what I understand, there needs to be a modifier applied directly to Tab unlike List, and not just the label.
Since there isn't any color/tint modifiers, is it not possible?
I've been experimenting with Liquid Glass quite a bit and watched all the WWDC videos. I'm trying to create a glassy segmented picker, like the one used in Camera:
however, it seems that no matter what I do there's no way to recreate a truly clear (passthrough) bubble that just warps the light underneath around the edges. Both Glass.regular and Glass.clear seem to add a blur that can not be evaded, which is counter to what clear ought to mean.
Here are my results:
I've used SwiftUI for my experiment but I went through the UIKit APIs and there doesn't seem to be anything that suggests full transparency.
Here is my test SwiftUI code:
struct GlassPicker: View {
@State private var selected: Int?
var body: some View {
ScrollView([.horizontal], showsIndicators: false) {
HStack(spacing: 0) {
ForEach(0..<20) { i in
Text("Row \(i)")
.id(i)
.padding()
}
}
.scrollTargetLayout()
}
.contentMargins(.horizontal, 161)
.scrollTargetBehavior(.viewAligned)
.scrollPosition(id: $selected, anchor: .center)
.background(.foreground.opacity(0.2))
.clipShape(.capsule)
.overlay {
DefaultGlassEffectShape()
.fill(.clear) // Removes a semi-transparent foreground fill
.frame(width: 110, height: 50)
.glassEffect(.clear)
}
}
}
Is there any way to achieve the above result or does Apple not trust us devs with more granular control over these liquid glass elements?
Reference Feedback FB19152594
Occurs with my 3rd Party UIKit App called "Lifeorities".
Latest occurrence was 7/27/25 at 13:49 pm.
Launch app (actual device running iPadOS 26 or iPadOS 26 simulator)
Initial screen displays view content and floating tab bar at top of screen (both portrait orientation and landscape).
Floating tab bar items respond to liquid glass effect (but liquid glass appearance of the whole tab bar doesn't comply with new glass pill shaped tab bar area).
Selected tab bar item obeys selected app designated color (assets).
Unselected tab bar items are using black text which is unreadable on app background which used dark mode as default (as intended).
Selecting another tab bar item shows the liquid glass effect as you navigate to the new tab bar item and shows the app designated color (assets).
Previous tab bar item that was selected, now is unselected and shows black text.
NOTE: iOS tab bar items work fine (show white foreground color as desired for unselected tab bar items).
Hi all.
I have tried using UIDesignRequiresCompatibility YES & NO for an application.
Running on iOS 26 BETA 5 makes no difference to the UI.
Running on Simulator MacOSS 26 BETA 5 makes no difference to the UI.
Anyone had luck with this info plist setting?
On iOS 26 not able to control size of UITabBar. Sharing code below.
Colour is applying correctly but somehow _UITabBarPlatterView which turns out as TabBar is not extending; leaving spaces on left, right & bottom sides.
class CustomTabBar: UITabBar {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .red
let firstItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), tag: 0)
let secondItem = UITabBarItem(title: "Search", image: UIImage(systemName: "magnifyingglass"), tag: 1)
let thirdItem = UITabBarItem(title: "Profile", image: UIImage(systemName: "person.circle"), tag: 2)
items = [firstItem, secondItem, thirdItem]
selectedItem = firstItem
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class ViewController: UIViewController {
let tabBar: CustomTabBar = {
let tb = CustomTabBar()
tb.translatesAutoresizingMaskIntoConstraints = false
return tb
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(tabBar)
NSLayoutConstraint.activate([
tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 25),
tabBar.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -25),
tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
])
}
}
when specifying height in CustomTabBar explicitly...
func alignInternalSubViews() {
subviews.forEach { subView in
subView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
subView.topAnchor.constraint(equalTo: topAnchor),
subView.leadingAnchor.constraint(equalTo: leadingAnchor),
subView.trailingAnchor.constraint(equalTo: trailingAnchor),
subView.bottomAnchor.constraint(equalTo: bottomAnchor),
subView.heightAnchor.constraint(equalToConstant: 62)
])
}
}
What should I need to do in order to get this capsule _UITabBarPlatterView and its subviews resize accordingly?
UIBarButtonItem setting isEnabled = false, but the item is still tappable and animating. Is this a new UI behavior or an issue?
Do the following steps:
On tapping on a UIBarButtonItem, disable by setting isEnabled = false and setting hidesSharedBackground = true
Enable the button by setting isEnabled = true and setting hidesSharedBackground = false
=> The button appears with bigger shared background
is this an issue?
please find the attachments for more details.
ViewController.swift.txt
Context & Issue
I am developing an iOS application.
My app icon uses colors that are relatively close to each other.
When the user enables Accessibility → Display & Text Size → Color Filters → Grayscale (or similar modes), the icon becomes harder to distinguish because it loses color and contrast is reduced.
Goal
When iOS switches to grayscale mode, I want the app icon to maintain good contrast between its elements so it remains clearly recognizable.
What I’ve tried
Redesigned the icon with more contrasting colors.
Added strokes/outlines, but it still doesn’t look much better in grayscale.
Researched how iOS renders app icons when grayscale is enabled, but couldn’t find a way to override or provide an alternative icon.
Specific questions
Is there any API or mechanism in iOS that allows providing a different version of the app icon when the user has grayscale mode enabled?
If there’s no direct API, are there any best practices for designing iOS app icons to ensure good contrast when converted to grayscale?
Do we have to design grayscale version for app icon?
Thank you!
So, I started with the developer beta on Tahoe a couple months ago. I gave the new Apps.app a fair shot.... I HATE it. Finally used a terminal work around to get Launchpad back up and running. Now with the release of the Public Beta and Developer Beta 5, Apple has nerfed the Launchpad.app altogether. Apple, listen to your customers. Yes some people really love spotlight but not everyone wants to scroll through a list of apps as long as my leg because, my PTSD brain won't let me remember the name of the app to type into spotlight. The Launchpad app had a great visual reference for those of us with poor memory function. Bring it back, and let your customers choose which one they want to use.
I'm having some trouble getting my widget to display how I want when the user has a tint applied to their home screen. The issue I'm having is with a Text() element, as well as a LinearGradient I am displaying on top of my image. The text should always be white, and the gradient is always black with varying levels of opacity.
I've managed to fix this issue with images displayed in my widget by leveraging
widgetAccentedRenderingMode(.fullColor)
however, there does not seem to be an equivalent of this for non-Image components. I'm aware of
.widgetAccentable(false)
but as I understand it, elements are already considered not accentable by default and you need to explicitly declare widgetAccentable(true) to add them to the accent group. I've tried specifying this to be false up and down my view hierarchy just to see if something will stick but no luck.
Are there any other levers I can pull to preserve the declared colors for my text and gradient components? The images I am displaying is album artwork where preserving the original image is integral, but the tinted text color and overlaid gradient often clash or just looks bad in general. Is there a solution for colored primitive elements?
After updating from iOS 18 to iOS 26, our app icon appears to have automatically received the new 'Liquid Glass' effect. We confirmed that this change occurred without us releasing a new app update.
My questions are:
Is this a system behavior where iOS 26 automatically applies the new icon style to existing apps?
If so, is it possible for a developer to control or customize this effect? I am also wondering if there are any methods other than using Icon Composer.