Browse Source

doc: bundling with CMake for macOS/iOS, HiDPI info.

pull/191/head
Vladimír Vondruš 8 years ago
parent
commit
35cf428974
  1. 83
      doc/platforms-macos.dox

83
doc/platforms-macos.dox

@ -31,13 +31,92 @@ namespace Magnum {
@tableofcontents @tableofcontents
@m_footernavigation @m_footernavigation
@todoc homebrew
@todoc code coverage @todoc code coverage
@todoc bundling, dmg cpack
With Apple decision to focus on Metal, macOS OpenGL support is stuck on version With Apple decision to focus on Metal, macOS OpenGL support is stuck on version
4.2 (i.e., a version before compute shaders are available). 4.2 (i.e., a version before compute shaders are available).
@section platforms-macos-bundle Bundle creation
While graphical applications *can* run "as is", directly from the compiled
executable, it's not possible to set various crucial properties of the app
such as @ref platforms-macos-hidpi "HiDPI" support --- for that you need to
create a bundle, specifying its options through a `*.plist` file. If you use
CMake, it provides [a builtin file](https://cmake.org/cmake/help/latest/prop_tgt/MACOSX_BUNDLE_INFO_PLIST.html)
with a few options and you can use it like this:
@code{.cmake}
add_executable(my-application main.cpp)
# ...
if(CORRADE_TARGET_APPLE)
set_target_properties(my-application PROPERTIES
MACOSX_BUNDLE ON
MACOSX_BUNDLE_BUNDLE_NAME "My Application"
MACOSX_BUNDLE_BUNDLE_IDENTIFIER "cz.mosra.magnum.my-application")
endif()
@endcode
The builtin file doesn't include all possible properties, however it's possible
to supply your own. A minimal file can look like this:
@code{.xml}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en-US</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>cz.mosra.magnum.my-application</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Magnum Triangle</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
</dict>
</plist>
@endcode
If you name it `MacOSXBundleInfo.plist.in`, it can be supplied to the bundle
like below. The @cb{.cmake} ${MACOSX_BUNDLE_EXECUTABLE_NAME} @ce will get
automatically replaced with the target executable name.
@code{.cmake}
if(CORRADE_TARGET_APPLE)
set_target_properties(my-application PROPERTIES
MACOSX_BUNDLE ON
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/MacOSXBundleInfo.plist.in)
endif()
@endcode
See [the official Apple Property List file documentation](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html)
for information about all options.
If you don't use CMake, these options can be set directly through Xcode UI, for
example.
@section platforms-macos-hidpi HiDPI (Retina) support
macOS and iOS is the only platform where HiDPI support of an app can't be
advertised programmatically. In case of CMake, you have to supply a custom
`*.plist` file with `NSHighResolutionCapable` enabled
(@ref platforms-macos-bundle "see above for details about creating bundles"):
@code{.xml}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>
@endcode
@section platforms-macos-opengl-best-practices Best practices @section platforms-macos-opengl-best-practices Best practices
Official Apple documentation: Official Apple documentation:

Loading…
Cancel
Save