Difference between revisions of "Application Bundle"

From Lazarus wiki
(syntaxhighlight)
Line 11: Line 11:
 
Open lazarus/components/macfiles/examples/createmacapplication.lpi in the IDE. Compile.
 
Open lazarus/components/macfiles/examples/createmacapplication.lpi in the IDE. Compile.
 
Open a Terminal of your choice. Type:
 
Open a Terminal of your choice. Type:
<pre>
+
<syntaxhighlight lang="bash">
 
cd project1/
 
cd project1/
 
lazarus/components/macfiles/examples/createmacapplication project1
 
lazarus/components/macfiles/examples/createmacapplication project1
 
ln -s ../../../project1 project1.app/Contents/MacOS/project1
 
ln -s ../../../project1 project1.app/Contents/MacOS/project1
</pre>
+
</syntaxhighlight>
  
 
==== Use shell script ====
 
==== Use shell script ====
Line 21: Line 21:
 
You can adapt the following shell script to create a customized application bundle for your application. It allows the creation of either debug or release bundle, being that in the release bundle a link to the executable is placed, to allow for debugging using the Lazarus IDE, while in release mode the executable is copied.
 
You can adapt the following shell script to create a customized application bundle for your application. It allows the creation of either debug or release bundle, being that in the release bundle a link to the executable is placed, to allow for debugging using the Lazarus IDE, while in release mode the executable is copied.
  
<pre>
+
<syntaxhighlight lang="bash">
 
#!/bin/sh
 
#!/bin/sh
 
# Force Bourne shell in case tcsh is default.
 
# Force Bourne shell in case tcsh is default.
Line 126: Line 126:
 
   echo '</plist>' >>$plistfile
 
   echo '</plist>' >>$plistfile
 
fi
 
fi
</pre>
+
</syntaxhighlight>
  
 
=== Executing application via Application Bundle ===
 
=== Executing application via Application Bundle ===

Revision as of 06:47, 6 June 2012

English (en) 日本語 (ja) русский (ru)

macOSlogo.png

This article applies to macOS only.

See also: Multiplatform Programming Guide


Application Bundle is a directory, often with ".app" extension, with special purpose on Mac OS X system. It contains resource files and information about the application. It is necessary for correct execution of applications which are using Carbon Interface.

Creating Application Bundle

From Lazarus

Open project and go to Project -> Project Options -> Application tab and push the Create Application Bundle button. The resulted Application Bundle will have inside symbolic link to the real executable.

Via command-line tool shipped with Lazarus

Open lazarus/components/macfiles/examples/createmacapplication.lpi in the IDE. Compile. Open a Terminal of your choice. Type:

cd project1/
lazarus/components/macfiles/examples/createmacapplication project1
ln -s ../../../project1 project1.app/Contents/MacOS/project1

Use shell script

You can adapt the following shell script to create a customized application bundle for your application. It allows the creation of either debug or release bundle, being that in the release bundle a link to the executable is placed, to allow for debugging using the Lazarus IDE, while in release mode the executable is copied.

#!/bin/sh
# Force Bourne shell in case tcsh is default.
#

#
# Reads the bundle type
#

echo "========================================================"
echo "    Bundle creation script"
echo "========================================================"
echo ""
echo " Please select which kind of bundle you would like to build:"
echo ""
echo " 1 > Debug bundle"
echo " 2 > Release bundle"
echo " 0 > Exit"

read command

case $command in

  1) ;;

  2) ;;
  
  0) exit 0;;

  *) echo "Invalid command"
     exit 0;;

esac

#
# Creates the bundle
#

appname=Magnifier
appfolder=$appname.app
macosfolder=$appfolder/Contents/MacOS
plistfile=$appfolder/Contents/Info.plist
appfile=magnifier

PkgInfoContents="APPLMAG#"

#
if ! [ -e $appfile ]
then
  echo "$appfile does not exist"
elif [ -e $appfolder ]
then
  echo "$appfolder already exists"
else
  echo "Creating $appfolder..."
  mkdir $appfolder
  mkdir $appfolder/Contents
  mkdir $appfolder/Contents/MacOS
  mkdir $appfolder/Contents/Resources

#
# For a debug bundle,
# Instead of copying executable into .app folder after each compile,
# simply create a symbolic link to executable.
#
if [ $command = 1 ]; then
  ln -s ../../../$appname $macosfolder/$appname
else
  cp $appname $macosfolder/$appname
fi  

# Copy the resource files to the correct place
  cp *.bmp $appfolder/Contents/Resources
  cp icon3.ico $appfolder/Contents/Resources
  cp icon3.png $appfolder/Contents/Resources
  cp macicon.icns $appfolder/Contents/Resources
  cp docs/*.* $appfolder/Contents/Resources
#
# Create PkgInfo file.
  echo $PkgInfoContents >$appfolder/Contents/PkgInfo
#
# Create information property list file (Info.plist).
  echo '<?xml version="1.0" encoding="UTF-8"?>' >$plistfile
  echo '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' >>$plistfile
  echo '<plist version="1.0">' >>$plistfile
  echo '<dict>' >>$plistfile
  echo '  <key>CFBundleDevelopmentRegion</key>' >>$plistfile
  echo '  <string>English</string>' >>$plistfile
  echo '  <key>CFBundleExecutable</key>' >>$plistfile
  echo '  <string>'$appname'</string>' >>$plistfile
  echo '  <key>CFBundleIconFile</key>' >>$plistfile
  echo '  <string>macicon.icns</string>' >>$plistfile
  echo '  <key>CFBundleIdentifier</key>' >>$plistfile
  echo '  <string>org.magnifier.magnifier</string>' >>$plistfile
  echo '  <key>CFBundleInfoDictionaryVersion</key>' >>$plistfile
  echo '  <string>6.0</string>' >>$plistfile
  echo '  <key>CFBundlePackageType</key>' >>$plistfile
  echo '  <string>APPL</string>' >>$plistfile
  echo '  <key>CFBundleSignature</key>' >>$plistfile
  echo '  <string>MAG#</string>' >>$plistfile
  echo '  <key>CFBundleVersion</key>' >>$plistfile
  echo '  <string>1.0</string>' >>$plistfile
  echo '</dict>' >>$plistfile
  echo '</plist>' >>$plistfile
fi

Executing application via Application Bundle

You can start the application from IDE (checked option Use Application Bundle for running and debugging (darwin only)) or via its Finder icon or in the native Mac OS X Terminal via "open project1.app".