I coded my app to run a certain storyboards based on device, but I did some test and I notice that if you comment out iPad Air 2 from the code, the code will run iPad Air on the iPad Air 2, which it shouldn't do. Does anyone know why it would do that?
Post
Replies
Boosts
Views
Activity
I have an app on the app store that was targeted to 13.6. Do I need to updated it for future updates?
Also, I have Xcode 11.7, but there is ios 14 on it.
If you run a 9.7 sizes Retina Pixel on a Mini would it be cut off?
I am asking because iPad Mini is smaller than the air yet they share the same pixel length. Xcode runs on pixal length, so I not sure if it will get cut off. Right now, my app fits my iPad Air 2 perfectly, but I don't know if it will work on the mini. Please can someone help me?
I have four Storyboards that use the same ViewControllers or same code. However, I want one thing to run only on one of the storyboards. That was to turn a label's background gray. I thought I could do this by just having the label on that storyboard connected to the code only, but it didn't work because it gave me this error when I ran a different storyboard.
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
I am thinking about solving it with if statement, but I don't know how to target a specific storyboard in code. If there is another way to solve my problem, I am fine with that option, but I would like to know if it's possible to target a certain storyboard in code. I have to code it gray to keep all the gray colored objects the same shade.
Please can someone help me?
Hi, I trying to get my app to run a certain storyboard based on device.
This is my code under DeviceModel.swift file.
import Foundation
import UIKit
public extension UIDevice {
static let modelName: String = {
var systemInfo = utsname()
uname(&systemInfo)
let machineMirror = Mirror(reflecting: systemInfo.machine)
let identifier = machineMirror.children.reduce("") { identifier, element in
guard let value = element.value as? Int8, value != 0 else { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}
func mapToDevice(identifier: String) -> String { // swiftlint:disable:this cyclomaticcomplexity
#if os(iOS)
switch identifier {
case "iPod5,1": return "iPod touch (5th generation)"
case "iPod7,1": return "iPod touch (6th generation)"
case "iPod9,1": return "iPod touch (7th generation)"
case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "iPhone 4"
case "iPhone4,1": return "iPhone 4s"
case "iPhone5,1", "iPhone5,2": return "iPhone 5"
case "iPhone5,3", "iPhone5,4": return "iPhone 5c"
case "iPhone6,1", "iPhone6,2": return "iPhone 5s"
case "iPhone7,2": return "iPhone 6"
case "iPhone7,1": return "iPhone 6 Plus"
case "iPhone8,1": return "iPhone 6s"
case "iPhone8,2": return "iPhone 6s Plus"
case "iPhone8,4": return "iPhone SE"
case "iPhone9,1", "iPhone9,3": return "iPhone 7"
case "iPhone9,2", "iPhone9,4": return "iPhone 7 Plus"
case "iPhone10,1", "iPhone10,4": return "iPhone 8"
case "iPhone10,2", "iPhone10,5": return "iPhone 8 Plus"
case "iPhone10,3", "iPhone10,6": return "iPhone X"
case "iPhone11,2": return "iPhone XS"
case "iPhone11,4", "iPhone11,6": return "iPhone XS Max"
case "iPhone11,8": return "iPhone XR"
case "iPhone12,1": return "iPhone 11"
case "iPhone12,3": return "iPhone 11 Pro"
case "iPhone12,5": return "iPhone 11 Pro Max"
case "iPhone12,8": return "iPhone SE (2nd generation)"
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad (3rd generation)"
case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad (4th generation)"
case "iPad6,11", "iPad6,12": return "iPad (5th generation)"
case "iPad7,5", "iPad7,6": return "iPad (6th generation)"
case "iPad7,11", "iPad7,12": return "iPad (7th generation)"
case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air"
case "iPad5,3", "iPad5,4": return "iPad Air 2"
case "iPad11,4", "iPad11,5": return "iPad Air (3rd generation)"
case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad mini"
case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad mini 2"
case "iPad4,7", "iPad4,8", "iPad4,9": return "iPad mini 3"
case "iPad5,1", "iPad5,2": return "iPad mini 4"
case "iPad11,1", "iPad11,2": return "iPad mini (5th generation)"
case "iPad6,3", "iPad6,4": return "iPad Pro (9.7-inch)"
case "iPad7,3", "iPad7,4": return "iPad Pro (10.5-inch)"
case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4":return "iPad Pro (11-inch) (1st generation)"
case "iPad8,9", "iPad8,10": return "iPad Pro (11-inch) (2nd generation)"
case "iPad6,7", "iPad6,8": return "iPad Pro (12.9-inch) (1st generation)"
case "iPad7,1", "iPad7,2": return "iPad Pro (12.9-inch) (2nd generation)"
case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8":return "iPad Pro (12.9-inch) (3rd generation)"
case "iPad8,11", "iPad8,12": return "iPad Pro (12.9-inch) (4th generation)"
case "AppleTV5,3": return "Apple TV"
case "AppleTV6,2": return "Apple TV 4K"
case "AudioAccessory1,1": return "HomePod"
case "i386", "x8664": return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATORMODELIDENTIFIER"] ?? "iOS"))"
default: return identifier
}
#elseif os(tvOS)
switch identifier {
case "AppleTV5,3": return "Apple TV 4"
case "AppleTV6,2": return "Apple TV 4K"
case "i386", "x8664": return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATORMODELIDENTIFIER"] ?? "tvOS"))"
default: return identifier
}
#endif
}
return mapToDevice(identifier: identifier)
}()
}
This is my code under the appDelegate
func application( application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
var storyboard: UIStoryboard
// instantiate the UIWindow
self.window = UIWindow(frame: UIScreen.main.bounds)
// Get the model name based in the extension.
let modelName = UIDevice.modelName
// If the modelName variable contains the string "iPhone 6" inside.
if (modelName.rangeOfString("iPad Air 2") != nil) {
storyboard = UIStoryboard(name: "mainStoryInVC", bundle: nil)
self.window!.rootViewController = storyboard.instantiateInitialViewController() as!ViewController
}
else if (modelName.rangeOfString("iPad Pro (9.7-inch)") != nil) {
storyboard = UIStoryboard(name: "mainStoryInVC", bundle: nil)
self.window!.rootViewController = storyboard.instantiateInitialViewController() as! ViewController
}
self.window!.makeKeyAndVisible()
return true
}
It give me a problem that modelName is a string that has no value rangeOfString. It's not giving me an option to replace it. How do I fix this?
I create a Tic Tac Toe AI in Xcode, and works just find, but it's predictable if discover the pattern. I code it so that it would go in this order unless there is text there already or there is two in row of the enemy 5,3,2,1,4,6,7,8,9. I want it so that is can randomly select one of the the labels to set text too
my labels IBOutlets are:
xOrOBox1
xOrOBox2
xOrOBox3
xOrOBox4
xOrOBox5
xOrOBox6
xOrOBox7
xOrOBox8
xOrOBox9
Whenever I do a XCode Project, it doesn't allow me to do a paste special when ever cut or copy. It just greyed out, is there anyway to fix that?
Is there any way to change the size of a UISwitch in IB becuase I working on a iPad 12.9" size, and the size is two small for it. I can't change it in code because I using one view controller.swift file for multiple device size/storyboards. Unless, I can target one storyboard in code. Please can some help me?
Whenever I create a segue between two view controllers, the second view controller gets gray frame around it that ruins my layout. I trying to get rid of it, but I don't know how. Please someone help me?
It only happen in IB, and it's when a I make a segue through IB not code. I have a picture, but there is no image attachment or can't find it.
Whenever I create a segue between two view controllers, the second view controller gets gray frame around it that ruins my layout. I trying to get rid of it, but I don't know how.
Please someone help me?