Does Apple Allow for iOS Native Apps to be vetted by third party mobile app vetting companies?
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.
Post
Replies
Boosts
Views
Activity
MY iphone just updated to Beta 18. Now there are what appears to be category pictures next to each email as displayed on the phone. It is an eyesore and distracting to see or follow emails cleanly with this feature. Ok to have those pictures if people categorize or choose categorize option, BUT I DO NOT. Does anyone know how to disable this odd and useless picture? I have tried LIST VIEW option, but it did nothing. Thank you!
Hello there,
I have a couple of question about Apple Pay guidelines:
• if we offer Apple Pay payment method in our app, can we disable the selection (I mean the method selection NOT the Payment button!) IF certain condition happens? E.g. the user cannot select apple pay payment method because our basket is not ready yet.
• Are we forced to move the apple pay payment method on the top of our selection? E.g. Cards, Cash On Delivery, Coupon, Apple Pay --> Apple Pay, Cards, Cash On Delivery, Coupon
One last technical question:
• when we start the payment process we are gonna create the request and present the sheet BUT we have to call our backend for pre-authorization, is it allowed?
@objc private func applePayButtonTapped(sender: UIButton) {
// TODO: Is it allowed?
// We need to ask to our backend a pre-authorization and THEN procced with Apple Pay flow
// but this could be done ONLY after the user TAP on BUY with APPLE PAY and BEFORE
// paymentAuthorizationViewController is called.
// Are we compliant to do that?
if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: FakeData.paymentInfo()) {
let request = PKPaymentRequest()
request.blablabla = blabla
let authorizationViewController = PKPaymentAuthorizationViewController(paymentRequest: request)
if let viewController = authorizationViewController {
viewController.delegate = self
present(viewController, animated: true, completion: nil)
}
}
}
Thanks in advance :)
I am an iOS app developer and I have a question regarding the implementation of an exit button in an iOS app. I remember reading in the past that Apple does not recommend this practice, but I couldn’t find any explicit policy on this matter in the current Human Interface Guidelines.
Could you please clarify whether it is acceptable to implement an exit button in an iOS app according to the latest guidelines? Any references or official documentation would be greatly appreciated.
It’s been over a week now, almost two and I’ve been stuck on early access request for playground for some reason. What’s going on here?
Hi,
I have a view that should do the following:
Set up and confirm a passcode upon account creation.
Verify passcode if signing in.
Reset passcode if prompted.
With the code below, functions 1 and 2 are working. However, I'm having an issue with function 3. I am able to declare the reset UserDefault on a previous view so that the proper logic occurs, which is to read in the input, and then confirm it. However, it is not working as intended. In this code here:
else if reset {
UserDefaults.standard.set(passcode, forKey: "new-passcode")
UserDefaults.standard.set(false, forKey: "reset-passcode")
passcode = ""
}
I store the new passcode, set reset to false, and clear the passcode so it can be entered again to confirm. The code does not run as intended however. The title does not change and I'm unsure if it is actually storing the passcode. And, when re-entering, it does not change the view as it should by setting view = .someView. I'm assuming there is just flaw in my logic but I'm not sure how to resolve this. Below is the full code. Please let me know if any further clarification is needed.
struct EnterPasscode: View {
@State var title = ""
@State var passcode = ""
@State var message = ""
@State var buttonState = false
@Binding var view: Views
var body: some View {
Group {
Spacer()
.frame(height: 50)
Text(title)
.font(.system(size: 36))
.multilineTextAlignment(.center)
.frame(height: 50)
Spacer()
if passcode != "" {
Text("\(passcode)")
.font(.system(size: 24))
.frame(height: 25)
} else {
Spacer()
.frame(height: 25)
}
Spacer()
.frame(height: 50)
PasscodeKeypad(passcode: $passcode)
Spacer()
if message != "" {
Text(message)
.frame(height: 25)
.foregroundStyle(Color.red)
} else {
Spacer()
.frame(height: 25)
}
Spacer()
WideButton(text: "Continue", buttonFunction: .functional, openView: .enterPasscode, view: .constant(.enterPasscode), buttonState: $buttonState)
.onChange(of: buttonState) { oldState, newState in
if buttonState {
let passcodeSet = UserDefaults.standard.bool(forKey: "passcode-set")
let storedPasscode = UserDefaults.standard.string(forKey: "passcode")
let reset = UserDefaults.standard.bool(forKey: "passcode-reset")
let newPasscode = UserDefaults.standard.string(forKey: "new-passcode")
print(reset)
if passcode.count == 4 {
if storedPasscode == nil {
if newPasscode == nil {
UserDefaults.standard.set(passcode, forKey: "new-passcode")
passcode = ""
} else if passcode == newPasscode {
UserDefaults.standard.set(passcode, forKey: "passcode")
UserDefaults.standard.set(true, forKey: "passcode-set")
view = .someView
}
} else if reset {
UserDefaults.standard.set(passcode, forKey: "new-passcode")
UserDefaults.standard.set(false, forKey: "reset-passcode")
passcode = ""
} else if newPasscode != nil {
if passcode == newPasscode {
UserDefaults.standard.set(passcode, forKey: "passcode")
view = .someView
}
}
}
checkPasscodeStatus()
buttonState = false
}
}
Spacer()
if !UserDefaults.standard.bool(forKey: "passcode-reset") && UserDefaults.standard.bool(forKey: "passcode-set") {
Button(action: {
view = .verifyPhone
}) {
Text("Forgot passcode?")
.foregroundStyle(.black)
}
}
Spacer()
.frame(height: 25)
}
.onAppear() {
checkPasscodeStatus()
}
.frame(width: UIScreen.main.bounds.width - 50)
}
func checkPasscodeStatus() {
let passcodeSet = UserDefaults.standard.bool(forKey: "passcode-set")
let storedPasscode = UserDefaults.standard.string(forKey: "passcode")
let reset = UserDefaults.standard.bool(forKey: "passcode-reset")
if reset {
title = "Enter new passcode"
} else if passcodeSet {
title = "Enter Passcode"
} else if storedPasscode != nil && storedPasscode != "" {
title = "Confirm Passcode"
} else {
title = "Select a 4 Digit Passcode"
}
}
}
struct WideButton: View {
@State var text: String
@State var buttonFunction: ButtonType
@State var openView: Views?
@Binding var view: Views
@Binding var buttonState: Bool
var body: some View {
Button(action: {
buttonPressed()
}, label: {
ZStack {
RoundedRectangle(cornerRadius: 5)
.fill(Color.black)
.frame(width: UIScreen.main.bounds.width - 50, height: 50)
Text(text)
.foregroundColor(.white)
}
})
}
func buttonPressed() {
switch buttonFunction {
case .openView: view = openView!
case .functional: buttonState = true
}
}
}
enum ButtonType {
case openView
case functional
}
In the previous version it was possible in the setting to search directly for an app, and then go on the setting and for example disable the notifications.
In iOS 18 you cannot do it anymore, you have to click on notification, and then search by scrolling the full list.
It would be nice if you can add again the search feature for the apps in the settings.
The format of photos on the new iOS 18 and its updates is HORRIBLE. Not userfriendly, not easy to navigate, not even appealing to the eye. I can’t even see my favorites album anymore and have to search for it every time. In short, I hate it. Well done Apple
I have some difficulties to recreate the same SF Symbols I have configure in the app into my code. Is there a way to copy not just the name but everything including all modifier.
Thank you
Hi Team,
We have noticed a behavioral change in iOS 18 related to SCEP profile downloads from the browser.
In current flow, we are using Cisco ISE as SCEP server.
While testing in iOS 18, we have observed that before communicating to SCEP server iOS is asking to download the SCEP server certificate.
This differs from iOS 17.4, where the communication happens seamlessly without any new prompts.
Could you please confirm if this certificate download popup behavior is expected in iOS 18?
Additionally, we would appreciate any guidance on whether this change in likely to persist in future updates, as it impacts our user flow.
Please let us know where we can attach video recordings of previous and current processes.
Thanks
I need my app to open all other links except domain.com. But clicking on domain.com still opens the app though I have added 'excluded': true.
Below is my aasa file
{
"applinks": {
"apps": [],
"details": [
{
"appID": "com.domain",
"paths": ["NOT /"],
"components": [
{
"/": "/",
"exclude": true
},
{
"/": "/biz/*"
},
{
"/": "/offers/deal-detail*",
"?": { "oId": "*" }
},
{
"/": "/review/*"
},
{
"/": "/emailActionHandler*"
}
]
}
]
}
}
I have also tried to verify this with swcutil tool, and it gives the right matches and blocks 'domain.com'. But the actual behavior on an iOS device is not the same.
I like this font. but in license only allowed for use in Mockup UI.
Feel free to use in commercial?
https://mobbin.com/apps/bloom-ios-e1251835-34e6-426e-9f94-f9595f2567fa/1c919e9a-d144-4aa0-b788-f9752111e281/screens
Hello. Was wondering if anybody has come across code or tutorial on creating a dynamic wind compass. Already tied into weather api, struggling with UI
Ben waiting about four days is any reason why I stu in queue?
why are people having problems with the playground download when some people have full access to it What is the difference between us and other people who have it
Hi,
I have two SwiftData models that are not working as intended. I'm able to add data to the models, but sometimes after refreshing the app data is missing. Any guidance would be greatly appreciated.
this is a test post
Ii have been waiting a couple of days for access to image playground also. I wonder if having my VPN activated during my initial early access request right after I installed 18.2 somehow put me in some sort of loop that’s not allowing me to be granted access. Is there anyone that has been waiting that had their VPN on when they requested early access?
it's unfair how some people have full access to Image Playground and others have to wait for hours and days I don't understand why Apple doing stuff like this to the customer treated everyone equally
App Store