macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

convertRectFromBacking:

INDEX>AppKit>NSScreen

デバイスのピクセルに整理された矩形を返します。

Objective-C

- (NSRect)convertRectFromBacking:(NSRect)aRect

Swift

func convertRectFromBacking(_ aRect: NSRect) -> NSRect

解説

デバイスのピクセルに整理された矩形を返します。

返り値

Objective-C

NSRect

Swift

NSRect

引数

Objective-C

(NSRect)aRect

Swift

(_ aRect: NSRect)

フレームワーク

ApplicationKit

クラス

NSScreen

使用可能

10.7

更新時のバージョン

OS X 10.10.2

参照

関連記事(外部サイト)

例文

Objective-C

Swift

    //NSScreen convertRectFromBacking:
    @IBAction func function005(sender: AnyObject) {
        let theScreen : NSScreen = NSScreen.mainScreen()!
        let newRect : NSRect = theScreen.convertRectFromBacking(NSMakeRect(0.3, 0.0, 100.3, 123.5))
        NSLog("newRect = (x=%.2f,y=%.2f,w=%.2f,h=%.2f)",
            Float(newRect.origin.x),
            Float(newRect.origin.y),
            Float(newRect.size.width),
            Float(newRect.size.height) )
        // -> (x=0.30,y=0.00,w=100.30,h=123.50)
    }

backingScaleFactor

INDEX>AppKit>NSScreen

スクリーンの倍率を返します

Objective-C

@property(readonly) CGFloat backingScaleFactor

Swift

open var backingScaleFactor: CGFloat { get }

解説

スクリーンの倍率を返します。
Retinaディスプレイの場合に2.0が返されます。

設定値

Objective-C

@property(readonly) CGFloat backingScaleFactor

Swift

var backingScaleFactor: CGFloat { get }

フレームワーク

ApplicationKit

クラス

NSScreen

使用可能

10.7-

更新時のバージョン

OS X 10.14.5
Swift4.0

参照

関連記事(外部サイト)

例文

Objective-C

Swift4.0

    @IBAction func function014(_ sender: Any) {
        let screenArray : [AnyObject] = NSScreen.screens
        for value in screenArray {
            print("backingScaleFactor = \(Float(value.backingScaleFactor)) ")
            //backingScaleFactor = 1.0
            //backingScaleFactor = 2.0 <-retina
            //backingScaleFactor = 1.0
        }
    }


Swift

    //NSScreen backingScaleFactor
    @IBAction func function004(sender: AnyObject) {
        let theScreen : NSScreen = NSScreen.mainScreen()!
        let backingScaleFactor : CGFloat = theScreen.backingScaleFactor
        NSLog("backingScaleFactor = %.2f",Float(backingScaleFactor) )
        // -> 1.0
    }

backingAlignedRect:options:

INDEX>AppKit>NSScreen

スクリーンにしたがって整理された矩形を返します

Objective-C

- (NSRect)backingAlignedRect:(NSRect)aRect
                     options:(NSAlignmentOptions)options

Swift

open func backingAlignedRect(_ rect: NSRect, options: AlignmentOptions = []) -> NSRect

解説

スクリーンにしたがって整理された矩形を返します
【NSAlignmentOptions】
alignMinXInward
Xの最小値を内側に合わせる
 入力値x= -0.3の場合 x= -0.0が返されます。
 入力値x= 0.3の場合 x= 1.0が返されます。

alignMinYInward

alignMaxXInward
Xの最大値を内側に合わせる
 入力値x=0.3)width= 100.3で(AlignMinXInward | (y) |AlignMaxXInward | (y))の場合
 まずxが0.0に調整されます。その後widthが100.3が内側に調整されます。
 したがって、x= 0.0,width=100.0が返されます。


alignMaxYInward

alignWidthInward

alignHeightInward

alignMinXOutward
Xの最小値を外側に合わせる
 入力値x= -0.3の場合 x= -1.0が返されます。
 入力値x= 0.3の場合 x= 0.0が返されます。


alignMinYOutward

alignMaxXOutward

alignMaxYOutward

alignWidthOutward

alignHeightOutward

alignMinXNearest

alignMinYNearest

alignMaxXNearest

alignMaxYNearest

alignWidthNearest

alignHeightNearest

alignAllEdgesInward

 すべての調整を内側にする

alignAllEdgesOutward
 すべての調整を外側にする

alignAllEdgesNearest
 すべての調整を近くにする

返り値

Objective-C

NSRect

Swift

AlignmentOptions

引数

Objective-C

(NSRect)aRect

Swift

_ aRect: NSRect

Objective-C

(NSAlignmentOptions)options

Swift

options: NSAlignmentOptions

フレームワーク

ApplicationKit

クラス

NSScreen

使用可能

10.7-

更新時のバージョン

OS X 10.14.5
Swinft4.0

参照

関連記事(外部サイト)

stackoverflow.com

例文

Swift4.0

 @IBAction func function013(_ sender: Any) {
        let screenArray : [NSScreen] = NSScreen.screens
        for theScreen in screenArray {
            //全部内側
            let aligneRect001 : NSRect = theScreen.backingAlignedRect(
                NSMakeRect(0.3, 0.0, 100.3, 123.5),
                options: AlignmentOptions.alignAllEdgesInward )
            NSLog("aligneRect001 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
                  Float(aligneRect001.origin.x),
                  Float(aligneRect001.origin.y),
                  Float(aligneRect001.size.width),
                  Float(aligneRect001.size.height) )
            //display1 aligneRect001 = (x=1.0,y=0.0,w=99.0,h=123.0)
            //display2 aligneRect001 = (x=0.5,y=0.0,w=100.0,h=123.5) <-Retina
            //display3 aligneRect001 = (x=1.0,y=0.0,w=99.0,h=123.0)

            //それぞれ設定
            let aligneOption002: AlignmentOptions = [.alignMinXInward, .alignMaxXInward, .alignMinYInward, .alignMaxYInward]
            let aligneRect002 : NSRect = theScreen.backingAlignedRect(
                NSMakeRect(0.3, 0.0, 100.3, 123.5),
                options: aligneOption002 )
            
            NSLog("aligneRect002 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
                  Float(aligneRect002.origin.x),
                  Float(aligneRect002.origin.y),
                  Float(aligneRect002.size.width),
                  Float(aligneRect002.size.height) )
            //(0.3, 0.0, 100.3, 123.5)の場合
            //display1 aligneRect002 = (x=1.0,y=0.0,w=99.0,h=123.0)
            //display2 aligneRect002 = (x=0.5,y=0.0,w=100.0,h=123.5)
            //display3 aligneRect002 = (x=1.0,y=0.0,w=99.0,h=123.0)
            
            //Flip?
            let aligneOption003: AlignmentOptions = [.alignMinXInward, .alignMaxXInward, .alignMinYInward, .alignMaxYInward]
            let aligneRect003 : NSRect = theScreen.backingAlignedRect(
                NSMakeRect(0.3, 0.0, 100.3, 123.5),
                options: aligneOption003  )
            
            NSLog("aligneRect003 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
                  Float(aligneRect003.origin.x),
                  Float(aligneRect003.origin.y),
                  Float(aligneRect003.size.width),
                  Float(aligneRect003.size.height) )
            //(0.3, 0.0, 100.3, 123.5)
            //display1 aligneRect003 = (x=1.0,y=0.0,w=99.0,h=123.0)
            //display2 aligneRect003 = (x=0.5,y=0.0,w=100.0,h=123.5)
            //display3 aligneRect003 = (x=1.0,y=0.0,w=99.0,h=123.0)

            
            //
            let aligneRect004 : NSRect = theScreen.backingAlignedRect(
                NSMakeRect(0.3, 0.0, 100.3, 123.5),
                options: [AlignmentOptions.alignMinXInward , .alignMinYNearest ,
                          .alignMaxXInward , .alignMaxYNearest]  )
            
            NSLog("aligneRect004 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
                  Float(aligneRect004.origin.x),
                  Float(aligneRect004.origin.y),
                  Float(aligneRect004.size.width),
                  Float(aligneRect004.size.height) )
            //(0.3, 0.0, 100.3, 123.5)
            //display1 aligneRect004 = (x=1.0,y=0.0,w=99.0,h=124.0)
            //display2 aligneRect004 = (x=0.5,y=0.0,w=100.0,h=123.5)
            //display3 aligneRect004 = (x=1.0,y=0.0,w=99.0,h=124.0)

        }
    }
   


Swift

    //NSScreen backingAlignedRect
    @IBAction func function003(sender: AnyObject) {
        let theScreen : NSScreen = NSScreen.mainScreen()!
        
        //全部内側
        let aligneRect001 : NSRect = theScreen.backingAlignedRect(
                            NSMakeRect(0.3, 0.0, 100.3, 123.5),
            options: NSAlignmentOptions.AlignAllEdgesInward )
        NSLog("aligneRect001 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
            Float(aligneRect001.origin.x),
            Float(aligneRect001.origin.y),
            Float(aligneRect001.size.width),
            Float(aligneRect001.size.height) )
        // ->aligneRect = (x=1.0,y=0.0,w=99.0,h=123.0)
        
        //それぞれ設定
        let aligneRect002 : NSRect = theScreen.backingAlignedRect(
            NSMakeRect(0.3, 0.0, 100.3, 123.5),
            options: NSAlignmentOptions.AlignMinXInward | .AlignMinYNearest |
                .AlignMaxXInward | .AlignMaxYNearest )
        
        NSLog("aligneRect002 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
            Float(aligneRect002.origin.x),
            Float(aligneRect002.origin.y),
            Float(aligneRect002.size.width),
            Float(aligneRect002.size.height) )
        //(0.3, 0.0, 100.3, 123.5)の場合
        // ->aligneRect002 = (x=1.0,y=0.0,w=99.0,h=124.0)
        
        //(-0.3, 0.0, 100.3, 123.5)の場合
        // ->aligneRect002 = (x=-0.0,y=0.0,w=100.0,h=124.0)
        //(-0.8, 0.0, 100.3, 123.5)の場合
        // ->aligneRect002 = (x=-0.0,y=0.0,w=99.0,h=124.0)

        //Flip?
        let aligneRect003 : NSRect = theScreen.backingAlignedRect(
            NSMakeRect(0.3, 0.0, 100.3, 123.5),
            options: NSAlignmentOptions.AlignRectFlipped | .AlignMinXInward | .AlignMinYNearest |
                .AlignMaxXInward | .AlignMaxYNearest  )
        
        NSLog("aligneRect003 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
            Float(aligneRect003.origin.x),
            Float(aligneRect003.origin.y),
            Float(aligneRect003.size.width),
            Float(aligneRect003.size.height) )
        //(0.3, 0.0, 100.3, 123.5)
        //aligneRect003 = (x=1.0,y=-0.0,w=99.0,h=123.0)
        
        //
        let aligneRect004 : NSRect = theScreen.backingAlignedRect(
            NSMakeRect(0.3, 0.0, 100.3, 123.5),
            options: NSAlignmentOptions.AlignMinXInward | .AlignMinYNearest |
                .AlignMaxXInward | .AlignMaxYNearest  )
        
        NSLog("aligneRect004 = (x=%.1f,y=%.1f,w=%.1f,h=%.1f)",
            Float(aligneRect004.origin.x),
            Float(aligneRect004.origin.y),
            Float(aligneRect004.size.width),
            Float(aligneRect004.size.height) )
        //(0.3, 0.0, 100.3, 123.5)
        //aligneRect003 = (x=1.0,y=-0.0,w=99.0,h=123.0)

    }

colorSpace

INDEX>AppKit>NSScreen

カラースペースを返します

Swift

open var colorSpace: NSColorSpace? { get }

Objective-C

@property(readonly, strong) NSColorSpace *colorSpace

解説

カラースペースを返します。

返り値

Objective-C

@property(readonly, strong) NSColorSpace *colorSpace

Swift

var colorSpace: NSColorSpace? { get }

引数

Objective-C

Swift


フレームワーク

ApplicationKit

クラス

NSScreen

使用可能

10.6-

更新時のバージョン

OS X 10.14.5
Swift4.0

参照

関連記事(外部サイト)

例文

Objective-C


Swift4.0

    @IBAction func function006(_ sender: Any) {
        let screenArray : [AnyObject] = NSScreen.screens
        for value in screenArray {
            let space :NSColorSpace = value.colorSpace!
            //
            print(space.localizedName as Any) //->Color LCD colorspace
            print(space.numberOfColorComponents) //->3
        }
    }


Swift

    //NSScreen mainScreen()
    //NSScreen deepestScreen()
    //NSScreen screens()
    //NSScreen supportedWindowDepths()
    //NSScreen deviceDescription
    //NSScreen visibleFrame
    //NSScreen colorSpace
    @IBAction func function001(sender: AnyObject) {
        let theScreen : NSScreen = NSScreen.mainScreen()!
        NSLog("main screen size=  (%.2f✕%.2f)",
                                    Float(theScreen.frame.size.width),
                                    Float(theScreen.frame.size.height) )
        //-> main screen size=  (1366.00✕768.00)
        
        let deepestScreen : NSScreen = NSScreen.deepestScreen()!
        NSLog("deepestScreen screen depth= %d", NSBitsPerPixelFromDepth(deepestScreen.depth) )
        //-> deepestScreen screen depth= 24
        

        
        let supportedWindowDepths : UnsafePointer<NSWindowDepth> = theScreen.supportedWindowDepths
        
        NSLog("supportedWindowDepths = %d", NSBitsPerPixelFromDepth( supportedWindowDepths[0]) )
        //-> supportedWindowDepths = 8
        
        let screenArray : [AnyObject] = NSScreen.screens()!
        for value in screenArray {
            NSLog("screen size=  (%.2f✕%.2f)",
                Float(value.frame.size.width),
                Float(value.frame.size.height) )
        }
        //-> screen size=  (1366.00✕768.00)
        //-> screen size=  (1920.00✕1080.00)

        let descDic : [NSObject:AnyObject] = theScreen.deviceDescription
        NSLog("description = %@", descDic )
        
        //description = {
        //    NSDeviceBitsPerSample = 8;
        //    NSDeviceColorSpaceName = NSCalibratedRGBColorSpace;
        //    NSDeviceIsScreen = YES;
        //    NSDeviceResolution = "NSSize: {72, 72}";
        //    NSDeviceSize = "NSSize: {1366, 768}";
        //    NSScreenNumber = 69680256;
        //}
        
        let visibleFrame : NSRect = theScreen.visibleFrame
        NSLog("visibleFrame = (x=%.2f,y=%.2f,w=%.2f,h=%.2f)",
                                    Float(visibleFrame.origin.x),
                                    Float(visibleFrame.origin.y),
                                    Float(visibleFrame.size.width),
                                    Float(visibleFrame.size.height) )
        // -> visibleFrame = (x=0.00,y=43.00,w=1366.00,h=702.00)
        
        let colorSpace : NSColorSpace = theScreen.colorSpace!
        NSLog("colorSpace = %@",colorSpace.description)
        // -> colorSpace = Color LCD colorspace

        
        var window : NSWindow
        = NSWindow(contentRect: NSMakeRect(0.0, 0.0, 300.0, 200.0),
            styleMask: NSTitledWindowMask
                | NSClosableWindowMask
                | NSMiniaturizableWindowMask
                | NSResizableWindowMask,
            backing: .Buffered,
            defer: false,
            screen: theScreen )
        windowArray.addObject(window) //ウインドウを保持するための配列に追加。アプリ終了時に配列は破棄
        window.center()//ウインドウをスクリーンの中心に
        window.title = "ウインドウタイトル"//タイトル設定
        window.orderFront(self)//前面に
        window.makeKeyAndOrderFront(self)//表示
    }

Workspace 起動設定オプション

INDEX>AppKit>NSWorkspace

起動オプション

Objective-C

NSString * const NSWorkspaceLaunchConfigurationAppleEvent;
NSString * const NSWorkspaceLaunchConfigurationArguments;
NSString * const NSWorkspaceLaunchConfigurationEnvironment;
NSString * const NSWorkspaceLaunchConfigurationArchitecture;

Swift

let NSWorkspaceLaunchConfigurationAppleEvent: String
let NSWorkspaceLaunchConfigurationArguments: String
let NSWorkspaceLaunchConfigurationEnvironment: String
let NSWorkspaceLaunchConfigurationArchitecture: String

解説

launchApplicationAtURL:options:configuration:error: メソッドで使用

NSWorkspaceLaunchConfigurationAppleEvent
  アップルイベント
NSWorkspaceLaunchConfigurationArguments
  起動時の引数
NSWorkspaceLaunchConfigurationEnvironment
  環境変数

NSWorkspaceLaunchConfigurationArchitecture
 アーキテクチャ
 NSBundleExecutableArchitectureI386
  386
 NSBundleExecutableArchitecturePPC
  PowerPC
 NSBundleExecutableArchitectureX86_64
  x86 64ビット
 NSBundleExecutableArchitecturePPC64
  PowerPC 64ビット

フレームワーク

ApplicationKit

クラス

NSWorkspace

使用可能

10.6-

更新時のバージョン

OS X 10.10.3
Swift1.2

参照

cocoaapi.hatenablog.com

関連記事(外部サイト)

Mac OSで関数をフックする方法


github.com

例文

Objective-C

Swift

    //NSWorkspace launchApplicationAtURL:options:configuration:error:
    @IBAction func function009(sender: AnyObject) {
        let theWorkspace : NSWorkspace = NSWorkspace.sharedWorkspace()
        var anError: NSError?
        let andPrint = NSWorkspaceLaunchOptions.AndPrint.rawValue
        let mask = Int( andPrint ) // cast from UInt
        
        let theURL : NSURL = NSURL(fileURLWithPath: "/Applications/iTunes.app")!
        let theOption : NSNumber = NSNumber(integer: 0)
        //32ビットモードで起動
        let theArc : NSNumber = NSNumber(integer: NSBundleExecutableArchitectureI386)
        //64ビットモードで起動
        //let theArc : NSNumber = NSNumber(integer: NSBundleExecutableArchitectureX86_64)
        
        let theConfig : [NSObject : AnyObject] = [NSWorkspaceLaunchConfigurationArchitecture : theArc]
        if (theWorkspace.launchApplicationAtURL(theURL,
                options: NSWorkspaceLaunchOptions.Async,
                configuration: theConfig,
                error: &anError) != nil){
            NSLog("YES")
        }else{
            NSLog("NO")
        }

        

    }

type:conformsToType:

INDEX>AppKit>NSWorkspace

あるUTIタイプは別のUTIタイプに包含されるかを返します

Objective-C

- (BOOL)type:(NSString *)firstTypeName
conformsToType:(NSString *)secondTypeName

Swift

func type(_ firstTypeName: String,
conformsToType secondTypeName: String) -> Bool

解説

secondTypeNameはfirstTypeNameを包含するか。

例えば
firstTypeName = 「com.compuserve.gif」でsecondTypeNameが「public.data」の場合gifファイルはデータであるのでYES(true)が返されます。

firstTypeName = 「public.data」でsecondTypeNameが「com.compuserve.gif」の場合、データは必ずしもgifファイルではないのでNO(false)が返されます。

firstTypeName = 「com.compuserve.gif」でsecondTypeNameが「public.png」の場合、gifファイルはpngファイルではないのでNO(false)が返されます。


返り値

包含するかどうか
Objective-C

BOOL

Swift

Bool

引数

Objective-C

(NSString *)firstTypeName

Swift

_ firstTypeName: String

Objective-C

(NSString *)secondTypeName

Swift

secondTypeName: String

フレームワーク

ApplicationKit

クラス

NSWorkspace

使用可能

10.0

更新時のバージョン

OS X 10.10.3
Swift1.2

参照

関連記事(外部サイト)

例文

Objective-C

Swift

    //NSWorkspace type:conformsToType:
    @IBAction func function021(sender: AnyObject) {
        let theWorkspace : NSWorkspace = NSWorkspace.sharedWorkspace()
        
        if (theWorkspace.type("com.compuserve.gif", conformsToType: "public.data") ){
            NSLog("YES")
        }else{
            NSLog("NO")
        }
        //->YES gifはdataに包含される
        
        if (theWorkspace.type("public.data", conformsToType: "com.compuserve.gif") ){
            NSLog("YES")
        }else{
            NSLog("NO")
        }
        //->NO dataはgifに包含されない
        
        if (theWorkspace.type("com.compuserve.gif", conformsToType: "public.png") ){
            NSLog("YES")
        }else{
            NSLog("NO")
        }
        //->NO gifはpngに包含されない
    }

preferredFilenameExtensionForType:

INDEX>AppKit>NSWorkspace

UTIに基づいた優先の拡張子を返します

Objective-C

- (NSString *)preferredFilenameExtensionForType:(NSString *)typeName

Swift

func preferredFilenameExtensionForType(_ typeName: String) -> String?

解説

UTIに基づいた優先の拡張子を返します。

引数として「com.compuserve.gif」を与えると「gif」と返されます。

返り値

Objective-C

(NSString *)

Swift

String?

引数

Objective-C

(NSString *)typeName

Swift

_ typeName: String

フレームワーク

ApplicationKit

クラス

NSWorkspace

使用可能

10.5-

更新時のバージョン

OS X 10.10.3
Swift1.2

参照

関連記事(外部サイト)

例文

Objective-C

Swift

//NSWorkspace preferredFilenameExtensionForType:
    @IBAction func function019(sender: AnyObject) {
        //ファイルを選択
        var openPanel = NSOpenPanel()
        openPanel.allowsMultipleSelection = false
        openPanel.canChooseDirectories = false
        openPanel.canCreateDirectories = false
        openPanel.canChooseFiles = true
        openPanel.beginWithCompletionHandler { (result) -> Void in
            //オープンパネルでOKを選択したら
            if result == NSFileHandlingPanelOKButton {
                //選択したファイルを
                let theWorkspace : NSWorkspace = NSWorkspace.sharedWorkspace()
                let theURL : NSURL =  openPanel.URL!
                let filepath : NSString = theURL.path!
                var anError : NSError?
                let utiType : NSString? = theWorkspace.typeOfFile(filepath as String, error: &anError)
                if utiType != nil {
                    NSLog("%@", utiType!)
                    //Ex.->com.apple.web-internet-location , com.compuserve.gif
                    NSLog("%@", theWorkspace.preferredFilenameExtensionForType(utiType! as String)!)
                    //Ex.->webloc , gif
                }
            }//if result
        }//openPanel.beginWithCompletionHandler
    }