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

IOS 18 Update - Emoji Keyboard
I don't typically write reviews on new updates as they typically are fine. For once I did want to mention one thing that bothers me and hoping it can be changed. I greatly dislike the new emoji keyboard and how its become bigger. I don't like the large keyboard layout and they kind of hurt my eyes. I'm near sighted and so its not needed for me to have them so big. Is there a way to revert them to the previous version? I don't know if anyone else has the same thoughts on this subject. Maybe a possible option to have the ability to switch the keyboard size to which ever suits the user? Anything would be helpful as I do enjoy using the emojis but now I'm avoiding them. Thank you for your time and consideration.
0
0
19
1h
3d Color Profile Crash (Cinema 4d + Redshift)
Hello friends, We are about to launch new app where we want to implement 3d animations that we designed in Cinema 4d and rendered it in Redshift render engine. We worked with sRGB color profile and ACEScg colors profile which both works fine and display correct on Windows machines, but we got to the point where nothing is correct on Apple devices – simply we lost our colors, apple devices displays our 3d animation in a wrong way, since windows works fine. Does anyone know the best workflow from Cinema 4d + Redshift + After Effects to match same colors on both systems and everywhere? We already tried youtube, adobe support, exporting it in EXR, PNG, JPG, LINEAR, TIFF, MP4 etc. – Importing it to After effects with sRGB workflow and ACEScg – it doesnt't work on Macbook, ipad, iphone etc. Please help CHRIS
0
0
85
1d
Photos album is chaotic
This is my first day with IOS 18.1.1 and so far it’s smooth. my only problem is how chaotic the photos app has become during the update. For one, i dont like how to access any of the organization it’s at the way bottom and even after customizing and reorganizing there’s no way to to move that section to the top. i also dont like how all my photos are just out on front street when the app is launched, it makes everything hard to look at and hard to find. please fix this and make browsing photos enjoyable again.
1
0
59
1d
Picker and DatePicker selection confusion
I have a multi view app I am trying to develop as my first app. I have gone through much of HackingwithSwiftui Xcode 16.1 SwiftUI on a MacAir The prior views in the app store various information. golf Course info in one and Golfers info in another. This third view is to record rounds of golf played. I started it simple with me entering input manually and that worked. I then decided to start using pickers with the first two being a DatePicker and the second pulling in the nickname(Handle) for players to select from. in a Handle Picker. Following is my code. I can select a date as of Now and prior for date played and also the second picker does pull in the all the Handles from my prior view and I can select a Handle of the player for the round. I then fill in all the other information. When I exit the view I do see that the Round is created but the Date always defaults to Now and the Handle stays blank. When i go back in to edit the round I can change the date and select a Handle but can get them to save. I have tried many things and searched for days on the web for examples with no luck. I am sure its something simple. Any help is appreciated as I want to add for pickers for course, tee and other fields. But until I figure out what I am missing the project is at a standstill. import SwiftUI import SwiftData struct RoundsEditDataView: View { @Bindable var roundsdata: RoundsData @Environment(.modelContext) private var modelContext @State private var playDate = Date.now @Query(sort: \PlayerData.playerHandle) private var players: [PlayerData] @State private var selectedHandle: PlayerData? = nil var body: some View { Form { HStack { Text("Course:") TextField("Course Name", text: $roundsdata.roundscourseName) .textContentType(.name) } HStack { DatePicker("Date:", selection: $playDate, in: ...Date(), displayedComponents: .date) } Section { Picker("Handle:", selection: $selectedHandle) { Text("Select a Handle").tag(nil as PlayerData?) ForEach(players, id: \.self) { player in HStack { Text(player.playerHandle) .frame(maxWidth: .infinity, alignment: .leading) .tag(player as PlayerData?) } .frame(maxWidth: .infinity, alignment: .leading) .tag(player as PlayerData?) } } // .pickerStyle(.inline) this does not fix issue or design wise work } The rest of this works fine for now until I decide to convert more to picker lists. HStack { Text("Tee:") TextField("Tee", text: $roundsdata.roundsTee) .textContentType(.name) } HStack { Text("Handicap:") TextField("Handicap", value: $roundsdata.roundsHandicap, format: .number) .textContentType(.name) } HStack { Text("*****:") TextField("*****", value: $roundsdata.roundsGross, format: .number) } HStack { Text("Net:") TextField("Net", value: $roundsdata.roundsNet, format: .number) .textContentType(.name) } HStack { Text("Rating:") TextField("Rating", value: $roundsdata.roundsRating, format: .number) .textContentType(.name) } HStack { Text("Slope:") TextField("Slope", value: $roundsdata.roundsSlope, format: .number) .textContentType(.name) } } } }
1
0
98
2d
iOS 18.2 public beta error
Hello I’m here to post my recent updates errors and bugs on iOS 18.2 After installing after few hours my screen display was flashing like thunder I notice two times first I tot its video second time realised it was error after that screen got green color and brightness increased when check with settings black screen became green. i tried calling customer support they asked me to backup the device and turn off beta updates and reinstall the software using computer. but I don’t want to downgrade becoz I got lost gbs of photos videos and some datas stored on app sometimes I can backup and restore photos and video but I don’t want to miss out other important datas stored on app specially. Please some one help me and suggest me how to downgrade to iOS 18.1 another question shall wait for next update coming in December while waiting any damage will happen to my screen display or to my battery?? Pls help me
0
0
203
6d
iOS App to connect to classic bluetooth devices
Hi, I am developing an application using Flutter to connect to a Bluetooth Classic device (device is also developed by me), as Flutter is multi-platform I have tested this functionality in Android devices and it works fine, but when I want to develop the functionality of scanning BT devices, connect and send commands it is not possible due to I haven't found classic BT libraries to make this actions for iOS, do you know any library? There is any reason why isn't it possible?
2
0
160
6d
App branding in navigation bar on every screen.
I am seeking guidance regarding the inclusion of app branding on the navigation controller across all screens within our application. Although it appears that Apple doesn't typically recommend this practice, our client has specifically requested the addition of branding elements. Can you please advise if it is permissible to implement such branding, and whether doing so would affect the app review process? The apple guideline state: "Ensure branding always defers to content. Using screen space for an element that does nothing but display a brand asset can mean there’s less room for the content people care about. Aim to incorporate branding in refined, unobtrusive ways that don’t distract people from your experience." Source: https://developer.apple.com/design/human-interface-guidelines/branding
1
0
153
1w
Is [NSKeyedUnarchiver unarchiveObjectWithFile:] reentrant?
I am experiencing strange crashes in my (ObjC) code, that insinuate some memory corruption (mostly running SHA256 decryption for file data in my code there's a // return object that was stored in encrypted file - (id) objectFromEncryptedFile:(NSString *)filePath { // read MYCrypto object that includes encrypted object of any class MYCrypto *encData = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; // decrypt, unarchive and return return [encData objectFromEncryptedData:encData.data]; } That seems to be called from different queues that are not synchronized. It came to me that maybe NSKeyedUnarchiver is not "thread safe" and maybe unarchiveObjectWithFile is not reentrant? Couldn't find anything in the normal documentation, but most of the old docs are no longer searchable. Can someone shed light on this?
0
0
143
1w
Core Data Error - "NSCocoaErrorDomain" - code: 134060
Hi, I am implementing the synchronisation of SwiftData with CloudKit as described in the Apple Documentation titled - "Syncing model data across a person’s devices." My app runs fine on iPhone without activating CloudKit under "Signing and Capabilities" option. But when activated, I get a CoreData error with a code: 134060. My app is in development stage. The following is the code snippet for your reference taken from the main structure adopting the App protocol. init() { do { #if DEBUG let schema = Schema([ Debit.self, Credit.self, ]) let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false) // Use an autorelease pool to make sure Swift deallocates the persistent // container before setting up the SwiftData stack. try autoreleasepool { let desc = NSPersistentStoreDescription(url: modelConfiguration.url) let opts = NSPersistentCloudKitContainerOptions(containerIdentifier: "iCloud.com.sureshco.MyFirstApp") desc.cloudKitContainerOptions = opts // Load the store synchronously so it completes before initializing the CloudKit schema. desc.shouldAddStoreAsynchronously = false if let mom = NSManagedObjectModel.makeManagedObjectModel(for: [ Debit.self, Credit.self, ]) { let container = NSPersistentCloudKitContainer(name: "MyFirstApp", managedObjectModel: mom) container.persistentStoreDescriptions = [desc] container.loadPersistentStores {_, err in if let err { fatalError(err.localizedDescription) } } // Initialize the CloudKit schema after the store finishes loading. try container.initializeCloudKitSchema() // Remove and unload the store from the persistent container. if let store = container.persistentStoreCoordinator.persistentStores.first { try container.persistentStoreCoordinator.remove(store) } } } #endif sharedModelContainer = try ModelContainer(for: schema, configurations: [modelConfiguration]) } catch { fatalError(error.localizedDescription) } } Any help will be greatly appreciated! Regards Suresh.
0
0
179
1w
I get these errors every time: 'App' is ambiguous for type lookup in this context
import SwiftUI import RealmSwift @main struct UniqueHolidayApp: App { init() { migrateRealmIfNeeded() } var body: some Scene { WindowGroup { ContentView() } } private func migrateRealmIfNeeded() { let config = Realm.Configuration( schemaVersion: 1, migrationBlock: { migration, oldSchemaVersion in if oldSchemaVersion < 1 { // Realm will handle changes automatically for simple additions/removals } } ) Realm.Configuration.defaultConfiguration = config } }
0
0
162
1w
When using the animation, the CPU usage rises to around 20-25%.
I'm new to developing with SwiftUI and I created a Pomodoro app for macOS that runs in the menu bar. I added 4 animations and when the user selects the snow animation, it starts snowing on the screen. But the app uses 20%-30% of the CPU and has high energy consumption. I can't reduce it and I couldn't find a solution. // snow animation import SwiftUI struct SnowflakeView: View { @State private var flakeYPosition: CGFloat = -100 @State private var isAnimating = false private let flakeSize: CGFloat = CGFloat.random(in: 10...30) private let flakeColor: Color = Color( red: Double.random(in: 0.8...1), green: Double.random(in: 0.9...1), blue: Double.random(in: 1...1), opacity: Double.random(in: 0.6...0.8) ) private let animationDuration: Double = Double.random(in: 1...3) private let flakeXPosition: CGFloat = CGFloat.random(in: 0...310) var body: some View { Text("❄️") .font(.system(size: flakeSize)) .foregroundColor(flakeColor) .position(x: flakeXPosition, y: flakeYPosition) .onAppear { if !isAnimating { withAnimation(Animation.linear(duration: animationDuration).repeatForever(autoreverses: false)) { flakeYPosition = 280 + 50 } isAnimating = true } } } } I also have how I run the animation below. ZStack { ForEach(0..<10, id: \.self) { index in if selectedAnimal == "Snow" { SnowflakeView() } else if selectedAnimal == "Rain" { RainDropAnimation() }else if selectedAnimal == "Leaf"{ LeafFallAnimation() }else if selectedAnimal == "Confetti"{ ConfettiAnimation() } } }
0
0
182
1w
NWListener, NWConnection, not accepting connections
I'm using NWListener with NWConnection. This code work great and I am able to start the listener and successfully receive connections in Xcode preview. However, when I build/run on my phone, the listener does not seem to accept connections from the network. If the app sends a message to itself on the phone, it is received, but if I send a message to that ip/port from another network device, it is not accepted/received. Any help or suggestions appreciated. import Foundation import Network import Combine @Observable class UDPListener3 { var listener: NWListener? var queue = DispatchQueue.global(qos: .userInitiated) var messageReceived: Data? private(set) var isReady: Bool private(set) var listening: Bool = false private(set) var receiving: Bool = false private(set) var port: UInt16 = 0 init () { isReady = false listening = false receiving = false messageReceived = nil listener = nil } func GetPort() { var portText = "\(String(describing: listener!.port))" portText = portText.replacingOccurrences(of: "Optional(", with: "") portText = portText.replacingOccurrences(of: ")", with: "") portText = portText.replacingOccurrences(of: ",", with: "") port = UInt16(portText)! if let testPort = listener?.port?.rawValue { self.port = testPort } } func config(port: Int) { if port > 0 { configinit(port: NWEndpoint.Port(integerLiteral: NWEndpoint.Port.IntegerLiteralType(port))) } else { configinit(port: nil) } } func configinit(port: NWEndpoint.Port?) { // conifigure and create listener let params = NWParameters.tcp params.allowFastOpen = true if port == nil { self.listener = try? NWListener(using: params, on: .any)//port) } else { self.listener = try? NWListener(using: params, on: port!) } if listener != nil { GetPort() self.listening = true self.listener?.stateUpdateHandler = { [self] update in switch update { case .ready: self.isReady = true print("*Listener.ready on port \(String(describing: self.listener?.port))") GetPort() case .failed: // Announce we are no longer able to listen self.listening = false self.isReady = false print("*Listener.failed on port \(port)") case .cancelled: // Announce we are no longer able to listen self.listening = false self.isReady = false print("*Listener.canceled on port \(port)") default: print("*Listener default connecting to port \(port)... \(self.listener!.state)") } print() } self.listener?.newConnectionHandler = { connection in print("@called listener.newConnectionHandler") self.createConnection(connection: connection) } // start listening self.listener?.start(queue: self.queue) GetPort() } else { print("unable to start listener") } } func createConnection(connection: NWConnection) { connection.stateUpdateHandler = { (newState) in switch (newState) { case .ready: print(" ...Connection.ready")// - \(connection)") self.receive(connection) case .cancelled: print(" ...Connection.cancelled")// - \(connection)") case .failed: print(" ...Connection.failed")// - \(connection)") default: print(" ...Connection.default: \(connection.state)")// - \(connection)") } } print(" ...connection starting") connection.start(queue: .global()) } func receive(_ connection: NWConnection) { print() print(" ...connection receiving") // respond 200 received self.respond(on: connection) //connection.receiveMessage() { [self] data, context, isComplete, error in //<-- this would not return until timeout expired?? connection.receive(minimumIncompleteLength: 20000, maximumLength: 200000) { [self] data, context, isComplete, error in receiving = true /* Check what we have */ var message = "" if data != nil { message = String(decoding: data!, as: UTF8.self) } else { message = "" } // ERROR if let unwrappedError = error { print(" >>ERROR: received in \(#function) - \(unwrappedError)") receiving = false return } // NO DATA guard let data = data else { print(" >>NO DATA with context - \(String(describing: context))") receiving = false return } // NOT COMPLETE if !isComplete { print(" >>NOT COMPLETE with context - \(String(describing: context))") //return } // RECEIVED A MESSAGE if message != "" { self.messageReceived = data print(" ...received data - \(String(describing: context)) \(String(describing: data))") receiving = false connection.cancel() return } // keep receiving, self.receive(connection) } } } func respond(on connection: NWConnection) { let response = """ HTTP/1.1 200 OK Content-Length: 2 OK """ connection.send( content: response.data(using: .utf8), completion: .idempotent ) } func cancel() { self.listener?.cancel() self.listener = nil self.listening = false self.isReady = false print("listener disabled") } }
0
0
185
1w
IOS18 update
Finally updated my phone lastnight and I honestly wish I had NEVER bothered! Apple, what on earth is going on with your design team?! It’s a nightmare!!!!!! incsnt find anything, my photos are a nightmare when I knew wheee everything was. Now I have to try and work out how to find things more when it wasn’t ideal during a consultation with clients as I looked incompetent. The settings for passwords, battery etc have all been changed aswell and the pull down part for locking/bluetooth/aeroplane modes are all stupid aswell. Overall, extremely unsatisided with the overall update. I stayed with Apple because of the convenience of knowing the layout. I switched once to android and hated it because it had a different layout and I didnt like it having to start again when I’m already so busy. i lasted 24 hours with that phone before taking it back and upgrading back to Apple. Since the new layout and since I’m due an upgrade, there’s now nothing stopping me as your customer from leaving and now getting an android phone because I now find the upgrade difficult to navigate. If I could change it back I would. Overall dissatisfied and now willing to upgrade to another Apple next month.
0
0
125
1w
Exception occurred during startRunning and stopRunning calls using AVCaptureSession
I called the viewWillDisappear method in UIViewController AVCaptureSession *session = self.session; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ if (!session.running) { [session startRunning]; } }); I called the viewWillDisappear method dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ AVCaptureSession *session = self.session; if (session && session.running) { [session stopRunning]; } }); But when the user exits the background and returns to the current page, clicking 'Return' will cause an exception Abnormal information: #36 Thread SIGSEGV SEGV_ACCERR libdispatch.dylib _dispatch_source_set_timer + 32 one PrivacyAccounting 0x00000001a5ede000 + 533590244180685288 two PrivacyAccounting 0x00000001a5ede000 + 533590244180685288 three PrivacyAccounting 0x00000001a5ede000 + 1236823037899193652 four libdispatch.dylib 0x000000018ea01000 + 3414669699500290324 libsystem_pthread.dylib _pthread_wqthread + 14360117738498687264
0
0
69
1w