I have created a small app for macOS. I looked for information about how to submit it to the app store and read: "Build your apps using Xcode 13.1 or later…"
https://developer.apple.com/macos/submit/
I have an old iMac Late 2013. Unfortunately, the last version I can install is Catalina 10.15.7, and the last Xcode I can install is version 12.4. Does it mean that I cannot publish my app? Is there any way I can submit it? Is buying a new mac the only solution?
My iMac works well, and it is not easy for me to buy a new one.
I would appreciate any recommendation
Thank you
Post
Replies
Boosts
Views
Activity
I want my program to do something at a specific time. This is what I have tried:
func rellotge() {
countdownRellotge = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(actualitzaRellotge),
userInfo: nil, repeats: true)
}
@objc func actualitzaRellotge() {
let date = Date()
let calendar = Calendar.current
hour = calendar.component(.hour, from: date)
minutes = calendar.component(.minute, from: date)
seconds = calendar.component(.second, from: date)
//print (minutes, ":", seconds)
if (minutes == 40 && seconds == 0){
print ("do something")
}
}
This does not work if the computer goes to sleep. Even before that, it becomes buggy. (When I print the seconds, it seems that sometimes it skips some seconds)
How can I reliably make my program do something at a specific minute-second?
(Swift, macOS, storyboards.)
I have a window that is semitransparent and a NSView that I want to be not transparent or with a different transparent degree.
With my code, if I make the window transparent the NSView is also transparent.
func finestra() {
self.view.window?.alphaValue = 0.7
}
func nsView1() {
nsViewOutlet.wantsLayer = true
nsViewOutlet.layer?.backgroundColor = NSColor.white.cgColor
nsViewOutlet.alphaValue = 1
}
(macOS, Swift, storyboard)
Is it possible to have buttons in the title bar? I would like the same buttons that Apple uses in the preferences
Is it possible to convert a var with the day of the week to a number? (and the other way around)
let diaSetmana = "Monday"
let diaSetmana2 = 2
I know how to convert from date():
let date = Date()
let calendar = Calendar.current
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE"
let dayString = dateFormatter.string(from: date)
I am asking for converting not from date() but from a var that I have a random day of the week
(Swift, macOS, storyboards)
I try to make a simple page with an scroll, text and images. Similar to help pages in all mac programs. For instance, TextEdit help:
I tried many things. For instance:
Scroll View with constraints 0 to top, bottom, leading, trailing
Inside the Scroll View: a Label, an Image View, another Label. The labels with constraints 20px top, bottom, leading, trailing.
Labels Priority 750. The rest of constraints Priority 1000
With this, the user can change the width and height of the window, the text adapts but if the window is smaller than the content, I do not see the scroll. The attributes of the scroll are Show Vertical Scroller and Automatically Hide Scroller. If I change one of the options, I do not see the scroll space (or I see the scroll but not the movable part of the scroll)
How to have text, images, a window that can change width, height, and a scroll that appears when the content is bigger than the window. (Like a regular web page or the help that Apple has in many programs)?
(Swift, macOS, storyboards)
How to open a view (not a window) by clicking a menu item?
Let's suppose I have one window and two views:
I try to open with Menu item: "open view 1" and item: "open view 2":
(Here I asked the same question. Claude 31 solved very well with a button in one of the views. Here I am asking the same but with a button in the menu or menu item: https://developer.apple.com/forums/thread/690644 )
(Be aware that I am a beginner and I try to learn. Please explain in a simple way if possible)
(Swift, macOS, Storyboards)
How to open a View with code and macOS? (a View, not a Window)
I can open a Window Controller:
var controller: NSWindowController?
if controller == nil {
let storyboard:NSStoryboard = NSStoryboard(name: "Main", bundle: nil)
controller = storyboard.instantiateController(withIdentifier: "window1") as? NSWindowController
}
controller?.showWindow(self)
But I could not figure out how to open a View Controller. What would the be equivalent code for a View Controller in macOS?
(Swift, macOS, storyboards)
//I have a JSON in a URL. Simplified it is something like this:
{
"id": 1,
"name": "Leanne Graham",
"with-hyphen": 123
}
//Outside the class ViewController:
struct User: Codable {
let id: Int
let name: String
let with: Int
}
//In the class ViewController:
@IBAction func getJson(_ sender: NSButton) {
let url = URL(string: "https://example.com")!
URLSession.shared.dataTask(with: url) { data, _, _ in
if let data = data {
let result = try? JSONDecoder().decode(User.self, from: data)
//let result2 = result!.name //it works
//let result3 = result!.with-hyphen //it does not work
//print (result3)
}
}.resume()
}
I can safe in a let the regular "id" and "name" but I do not know how to deal with the keys with hyphens, in the example: "with-hyphen"
(Swift, macOS, Storyboards)
I can read a JSON from an URL. I would like to know when I can access the information. To be able to go from one function after the other. It seems that "completion" does not work with JSON? or perhaps I am doing something wrong?
I give a simplified example: I try to get the JSON information in func first() and then do something with that information in func second()
var result2 = "empty"
func first(completion: ()->()) {
let url = URL(string: "https://jsonplaceholder.typicode.com/users")!
URLSession.shared.dataTask(with: url) { data, _, _ in
if let data = data {
let result = try? JSONDecoder().decode([User].self, from: data)
self.result2 = result![0].name
}
}.resume()
completion()
}
func second() {
//do something after first()
print (result2)
}
@IBAction func button1(_ sender: NSButton) {
first {
second()
}
}
(Swift, macOS, storyboards)
I can find the total height of the screen:
let totalHight = NSScreen.main?.frame.height
To know the real space I have to subtract 23 px for the Menu Bar.
let usableHight = totalHight - 23
But on some occasions the user may not have the Menu Bar active (System Preferences > General > uncheck Automatically hide and show the menu bar)
Is there a way to know if the Menu Bar is hidden or show? or perhaps there is another way to know the real usable height of the screen?
(swift, macOS, storyboards)
I can animate a window just adding animate: true to a regular way to control a window. Is there any way to control the animation, especially the time the animation will take?
self.view.window?.setFrame(NSRect(x:0, y:0,
width:300, height:300),
display: true, animate: true)
(swift, storyboards, macOS)
Can I stop or pause an animation?
(I could find how to remove it:
view1.layer?.removeAllAnimations()
Here is the official documentation but I do not understand:
https://developer.apple.com/documentation/uikit/uiviewanimating/1649843-pauseanimation)
@IBAction func fadeOut(_ sender: NSButton) {
NSAnimationContext.runAnimationGroup({ (context) in
context.duration = 5.0
view1.animator().alphaValue = 0
})
}
(swift, macOS, storyboards)
I open a window with code. Every time the user clicks the button the same window opens again and again. How to avoid that?
This opens well the window, but multiple times:
@IBAction func obrirAmbCodi(_ sender: NSButton) {
let storyboard:NSStoryboard = NSStoryboard(name: "Main", bundle: nil)
guard let controller:NSWindowController = storyboard.instantiateController(withIdentifier: "finestra3") as? NSWindowController else { return }
controller.showWindow(self)
}
If I open the window with a segue (storyboard control drag) I can accomplish that by selecting the window controller > Attributes > Presentation > Single. But it seems that it does not work if I open the window with code
I change the text of a label dynamically (so I do not know the text of the label) how can I animate the size to fit. I am looking for a smooth, elegant transition for design purposes.
What I have tried:
NSAnimationContext.runAnimationGroup({ (context) in
context.duration = 4.0
label1.stringValue = "long, long text"
label1.animator().sizeToFit()
})