简体   繁体   中英

How to use custom fonts in a mac application?

I try to use custom fonts in my swift app, but they don't load.

I copy the fonts.ttf in my resources folder, and I added the names in Info.plist under "Fonts provided by application " key.

I've try with "Application fonts resource path" key from .plist , but no results. Here is the code I used to apply my font. I've try with : "MyFont.ttf" , and "MyFont"

@IBOutlet weak var label:NSTextField!

override func awakeFromNib() {
    label.font = NSFont(name: "MyFont.ttf", size: 15)
}

As "Application fonts resource path" is now a string type in XCode 7.3.1 and I couldn't seem to find a way to use an Array for multiple fonts, I used "." in the Info.plist:

     Application fonts resource path     String    .

and this seemed to work to pick up all my custom fonts in a Resources folder dynamically eg using Swift

 labelText.font = NSFont(name: "DS-Digital", size: 48)

However, to see it in XCode design mode (to choose a font from drop-down menu), I needed to first add the font to Font Book.

However, Font Book was not required for the dynamic method to work :)

First add the desired font you want to embed to your OSX app to your project:

在此处输入图片说明

Then click project > Info, then click the plus sign and add a new key "Application fonts resource path" and type the name of your fonts there creating an array of strings:

在此处输入图片说明

Now you can select custom font and the name of the font will show there, you still need to use the Font Book to make it available inside Xcode.

在此处输入图片说明

ATSApplicationFontsPath is for macOS :

ATSApplicationFontsPath ( String - macOS ) identifies the location of a font file or directory of fonts in the bundle's Resources directory. If present, macOS activates the fonts at the specified path for use by the bundled app. The fonts are activated only for the bundled app and not for the system as a whole. The path itself should be specified as a relative directory of the bundle's Resources directory. For example, if a directory of fonts was at the path /Applications/MyApp.app/Contents/Resources/Stuff/MyFonts/, you should specify the string Stuff/MyFonts/ for the value of this key.

macOS app Instructions:

  1. Select your Xcode project in the project navigator
  2. Select your app target
  3. Click the + button and to add a New Copy Files Phase
  4. Select Resources for the destination
  5. Under subpath specify the directory (eg Fonts ) where your embedded fonts will be copied to within your application bundle's Resources directory.
  6. Drag and drop the font files into the file list of the Copy Files build phase.

UIAppFonts is for iOS :

UIAppFonts ( Array - iOS ) Specifies any app-provided fonts that should be made available through the normal mechanisms. Each item in the array is a string containing the name of a font file (including filename extension) that is located in the app's bundle. The system loads the specified fonts and makes them available for use by the app when that app is run.

This key is supported in iOS 3.2 and later.

尝试从属性检查器中的界面构建器执行此操作。

By directly setting the Application fonts resource path as my font file's name, I solved this problem by sheer luck.

1个

For those whose font family is called something like My-Custom-Font-Family : be aware that in code you should instantiate your custom font like this: NSFont(name: "MyCustomFontFamily-Bold", size: 20) Spaces and "-" are ignored and font type is written after "-". I did not see this in any docs and spend a few hours trying to figure out wtf was wrong. Also if you want to get list of all available fonts you can use this code

for font in NSFontManager.shared.availableFonts {
    print(font)
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM