CINXE.COM

Tcl on MacOS

<!DOCTYPE html> <html lang='en'> <head> <meta charset='utf-8'> <meta name='viewport' content='width=device-width, initial-scale=1'> <meta name='description' content='Tclers wiki'> <meta name='author' content=''> <link rel='icon' href='/img/favicon.ico'> <title>Tcl on MacOS</title> <!-- Latest compiled and minified CSS --> <link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'> <link rel='stylesheet' href='/css/nikit.css' type='text/css'> <link rel='stylesheet' href='/css/sh_style.css' type='text/css'> <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.0/css/theme.bootstrap_3.min.css' type='text/css'> <script src='//cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js'></script> </head> <body onload='sh_highlightDocument(); nikitUser();'> <nav class='navbar navbar-fixed-top navbar-inverse'> <div class='container'> <div class='navbar-header'> <button type='button' class='navbar-toggle' data-toggle='collapse' data-target='#myNavbar'> <span class='icon-bar'></span> <span class='icon-bar'></span> <span class='icon-bar'></span> </button> <ul class='nav navbar-nav'> <li class='dropdown'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'>&nbsp;Tcler&#39;s Wiki<span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a href='/welcome'>Home</a></li> <li><a rel='nofollow' href='/recent'>Changes</a></li> <li><a rel='nofollow' href='/_random'>Random page</a></li> <li><a rel='nofollow' href='/_new'>New page</a></li> </ul> </li> </ul> </div> <div class='collapse navbar-collapse' id='myNavbar'> <ul class='nav navbar-nav'> <li class='dropdown' id='li_idPageEdit' style='display:none'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'><span id=name_idPageEdit>Page</span><span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a rel='nofollow' href='/_edit/Tcl+on+MacOS?A=1'>Comment</a></li> <li><a rel='nofollow' hidden='true' href='/_edit/Tcl+on+MacOS'>Edit</a></li> <li><a rel='nofollow' href='/_upload/Tcl+on+MacOS'>Upload</a></li> <li><a rel='nofollow' href='/ref/Tcl+on+MacOS'>References</a></li> <li><a rel='nofollow' href='/history/Tcl+on+MacOS'>History</a></li> <li><hr></li> <li><a href='#3c7237dc032fe1c15079cea2405f72df93aadcbd6009624be02143565a0c116d'>Build MacOS-App based on Tcl/Tk-Framework</a> </li> <li><a href='#ba3cb005cef1d595c796a558ace487c92e591017e0ccd0015a5d2c22cdae44e4'>&nbsp;&nbsp;&nbsp;MacOS</a> </li> <li><a href='#ffc71f1d14483b9e7e06a294a33510614793f7e4ad1edfbac57e8f3bfc537e52'>&nbsp;&nbsp;&nbsp;Sources:</a> </li> <li><a href='#13a8e465e34037b7d0212f04a7aee83a1ee2b79d8c485bb1e8424027e1260a36'>&nbsp;&nbsp;&nbsp;Tools:</a> </li> <li><a href='#28ded1693baed2dd35e6a19b257f6084599c39ce5f5d4314906c58d078582d46'>&nbsp;&nbsp;&nbsp;Prepare to compile a Tcl/Tk-Framework</a> </li> <li><a href='#1c4d983a09fea9606a0c1ca84ff988fcf54427ebb683ca53f7cd441fee66f861'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sources</a> </li> <li><a href='#e61a548a8622ddd222b521ad1f2bf6e8f0d14352bddd61656aeedafe68f5e63a'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tclbuild.sh</a> </li> <li><a href='#03a67d05cfe27a78de316d5b4a5215391f3ef564d8ab48320a5f9bc9f65d08c8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compile Tcl/Tk-Framework</a> </li> <li><a href='#0e08f4ac2a698201a070f8b4929fed9527e20620d9cbebdb952e880b1aec9528'>&nbsp;&nbsp;&nbsp;Result of compilation:</a> </li> <li><a href='#c541eec62df03247e08aea4f622c7c44a9eb49e37e1a64cb5c65fbc5596d8e22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test the Result</a> </li> <li><a href='#4b44872941d28cba7e1a5309fe0bc041880f645c7bf2d017d3afa318a172a0d3'>Extract a standalone Wish.app</a> </li> <li><a href='#5edad062258b489191c7119ea4fcfc0c8691e04659d5620836982232c9393baa'>&nbsp;&nbsp;&nbsp;What is needed</a> </li> <li><a href='#976e873796ef90d2c094a6041bf1dc9b0ab871e356225f00a5b861d996ff3bbf'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create myApp.app</a> </li> <li><a href='#9168888d041c4d7b7de9560045bec97f26e722dee9bdf154eeb4a9c3cd4c3fb9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug our App</a> </li> <li><a href='#45ae880b81fb0fb168f2e4fe82ec8aa1071789f47941700c3692db32c29e2ee5'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Make our app running Tcl-Code</a> </li> <li><a href='#aad6fe48d5370e8ccdf1e4c104580cf80530b22e42f9d684274cb344751085f5'>Codesigning and notarization</a> </li> <li><a href='#791a3b07c3af0a3b9294fb78fe9139e7271cf0845a457ae2ff4ded0fc20e2305'>&nbsp;&nbsp;&nbsp;Requirements</a> </li> <li><a href='#aaa6e9d4297e012571ee1baa96fd83698bffa1512689066fc1fe0e3fb3e5b5d7'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apple Developer ID:</a> </li> <li><a href='#aea303d2a588b286455b0d3607254b4b0ffe03d82c0ff55a759901af8ead4981'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Notarization Profile</a> </li> <li><a href='#22124e76cda7c43f8c2406322edd12cb0b4c1fc664fd3d7ebb0ee0941668d944'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entitlements.plist</a> </li> <li><a href='#0c8a8dc05eb789e6d9b03e2ccb194622156b6a4783c507a8a171bd491d426754'>&nbsp;&nbsp;&nbsp;... now step by step </a> </li> <li><a href='#df3426ab4257c97b124853a696005db04500e4e108ec060850006e3cbb1bf398'>&nbsp;&nbsp;&nbsp;some additional commands</a> </li> <li><a href='#60157cfcfe3f31c32f2c6394ad10f941a4b32c0be68151d35054c9230295fbc6'>Discussions</a> </li> </ul> </li> <li class='dropdown' id='li_idPageNoEdit' style='display:none'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'><span id=name_idPageNoEdit>Page</span><span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a rel='nofollow' href='/ref/Tcl+on+MacOS'>References</a></li> <li><a rel='nofollow' href='/history/Tcl+on+MacOS'>History</a></li> <li><hr></li> <li><a href='#3c7237dc032fe1c15079cea2405f72df93aadcbd6009624be02143565a0c116d'>Build MacOS-App based on Tcl/Tk-Framework</a> </li> <li><a href='#ba3cb005cef1d595c796a558ace487c92e591017e0ccd0015a5d2c22cdae44e4'>&nbsp;&nbsp;&nbsp;MacOS</a> </li> <li><a href='#ffc71f1d14483b9e7e06a294a33510614793f7e4ad1edfbac57e8f3bfc537e52'>&nbsp;&nbsp;&nbsp;Sources:</a> </li> <li><a href='#13a8e465e34037b7d0212f04a7aee83a1ee2b79d8c485bb1e8424027e1260a36'>&nbsp;&nbsp;&nbsp;Tools:</a> </li> <li><a href='#28ded1693baed2dd35e6a19b257f6084599c39ce5f5d4314906c58d078582d46'>&nbsp;&nbsp;&nbsp;Prepare to compile a Tcl/Tk-Framework</a> </li> <li><a href='#1c4d983a09fea9606a0c1ca84ff988fcf54427ebb683ca53f7cd441fee66f861'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sources</a> </li> <li><a href='#e61a548a8622ddd222b521ad1f2bf6e8f0d14352bddd61656aeedafe68f5e63a'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tclbuild.sh</a> </li> <li><a href='#03a67d05cfe27a78de316d5b4a5215391f3ef564d8ab48320a5f9bc9f65d08c8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compile Tcl/Tk-Framework</a> </li> <li><a href='#0e08f4ac2a698201a070f8b4929fed9527e20620d9cbebdb952e880b1aec9528'>&nbsp;&nbsp;&nbsp;Result of compilation:</a> </li> <li><a href='#c541eec62df03247e08aea4f622c7c44a9eb49e37e1a64cb5c65fbc5596d8e22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test the Result</a> </li> <li><a href='#4b44872941d28cba7e1a5309fe0bc041880f645c7bf2d017d3afa318a172a0d3'>Extract a standalone Wish.app</a> </li> <li><a href='#5edad062258b489191c7119ea4fcfc0c8691e04659d5620836982232c9393baa'>&nbsp;&nbsp;&nbsp;What is needed</a> </li> <li><a href='#976e873796ef90d2c094a6041bf1dc9b0ab871e356225f00a5b861d996ff3bbf'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create myApp.app</a> </li> <li><a href='#9168888d041c4d7b7de9560045bec97f26e722dee9bdf154eeb4a9c3cd4c3fb9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug our App</a> </li> <li><a href='#45ae880b81fb0fb168f2e4fe82ec8aa1071789f47941700c3692db32c29e2ee5'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Make our app running Tcl-Code</a> </li> <li><a href='#aad6fe48d5370e8ccdf1e4c104580cf80530b22e42f9d684274cb344751085f5'>Codesigning and notarization</a> </li> <li><a href='#791a3b07c3af0a3b9294fb78fe9139e7271cf0845a457ae2ff4ded0fc20e2305'>&nbsp;&nbsp;&nbsp;Requirements</a> </li> <li><a href='#aaa6e9d4297e012571ee1baa96fd83698bffa1512689066fc1fe0e3fb3e5b5d7'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apple Developer ID:</a> </li> <li><a href='#aea303d2a588b286455b0d3607254b4b0ffe03d82c0ff55a759901af8ead4981'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Notarization Profile</a> </li> <li><a href='#22124e76cda7c43f8c2406322edd12cb0b4c1fc664fd3d7ebb0ee0941668d944'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entitlements.plist</a> </li> <li><a href='#0c8a8dc05eb789e6d9b03e2ccb194622156b6a4783c507a8a171bd491d426754'>&nbsp;&nbsp;&nbsp;... now step by step </a> </li> <li><a href='#df3426ab4257c97b124853a696005db04500e4e108ec060850006e3cbb1bf398'>&nbsp;&nbsp;&nbsp;some additional commands</a> </li> <li><a href='#60157cfcfe3f31c32f2c6394ad10f941a4b32c0be68151d35054c9230295fbc6'>Discussions</a> </li> </ul> </li> <li><a href="/page/Showcase">Showcase</a></li> <li><a href="/page/Tcl+Tutorial+Lesson+0">Tutorial</a></li> <li><a href="/page/Articles">Articles</a></li> <li><a href="/page/Tcl+Playground">Playground</a></li> <li class='dropdown'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'>&nbsp;Help<span class='caret'></span></a> <ul class='dropdown-menu scrollable-menu' role='menu'><li><a rel='nofollow' href='/page/Help'>Page Markup</a></li> <li><a rel='nofollow' href='/page/How+do+Wiki+Categories+work'>Wiki Categories</a></li> <li><a rel='nofollow' href='/page/Contents'>Topics</a></li> <li><a rel='nofollow' target='_blank' href='https://chiselapp.com/user/stevel/repository/nikit/ticket'>Report Problems</a></li> <li><a rel='nofollow' href='/privacy'>Privacy</a></li> <li><a rel='nofollow' href='/license'>License</a></li> </ul> </li> </ul> <ul class='nav navbar-nav navbar-right'> <li class='dropdown'> <a class='dropdown-toggle' data-toggle='dropdown' href='#'><span id=name_SMenu>User</span><span class='caret'></span></a> <ul class='dropdown-menu' id='ul_SMenu'> </ul> </li> </ul> <form class='navbar-form navbar-right' method='post' action='/search' id='searchform'> <input name='Q' type='text' class='form-control' placeholder='Search...'/> <input type="hidden" name="sites" value="wiki.tcl-lang.org"/> </form> </div> </div> </nav> <div class='container'> <div class='row'> <div class='col-xs-12'> <h2>Tcl on MacOS</h2> </div> </div> <div class='row'> <div class='col-xs-12'> <p class='mkup_p'>Dear all, Tcl/Tk on MacOS challenges me:</p><UL class='mkup_UL'><li class='mkup_li'>an old version of TclTk (8.5) as default on MacOS</li><li class='mkup_li'>build applications for the MacOS platform<UL class='mkup_UL'><li class='mkup_li'>and especially sign a complete app to be recognized on MacOS</li></UL></li><li class='mkup_li'>and maybe also some performance issue.</li></UL><p class='mkup_p'>Let us talk about our experience and best practices.</p><p class='mkup_p'>Manfred</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> - 2025-02-16 18:00:00</b></p><h2 id='3c7237dc032fe1c15079cea2405f72df93aadcbd6009624be02143565a0c116d' class='mkup_h1'>Build MacOS-App based on Tcl/Tk-Framework</h2><p class='mkup_p'>after long nights of trial and error and with the support from Kevin, Paul and Alexander I can provide a solution for this issue here:</p><UL class='mkup_UL'><li class='mkup_li'>Kevin Walzer [<a rel='nofollow' class='mkup_a' href='https://www.codebykevin.com'>L1 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li><li class='mkup_li'>Paul Obermeier [<a rel='nofollow' class='mkup_a' href='https://www.tcl3d.org/bawt'>L2 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li><li class='mkup_li'>Alexander Schoepe [<a rel='nofollow' class='mkup_a' href='https://www.sowaswie.de/tcl-tk'>L3 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li></UL><h3 id='ba3cb005cef1d595c796a558ace487c92e591017e0ccd0015a5d2c22cdae44e4' class='mkup_h2'>MacOS</h3><p class='mkup_p'>The MacOS, I build this intstruction </p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_0' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_0' class='sh_tcl sh_sourceCode'>uname -a Darwin &hellip; 24.3.0 Darwin Kernel Version 24.3.0: Thu Jan 2 20:24:06 PST 2025; root:xnu-11215.81.4~3/RELEASE_ARM64_T8103 arm64</pre></div><h3 id='ffc71f1d14483b9e7e06a294a33510614793f7e4ad1edfbac57e8f3bfc537e52' class='mkup_h2'>Sources:</h3><p class='mkup_p'><a rel='nofollow' class='mkup_a' href='https://www.tcl-lang.org/software/tcltk/download.html'>https://www.tcl-lang.org/software/tcltk/download.html <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><UL class='mkup_UL'><li class='mkup_li'>tcl8.6.16-src.tar.gz [<a rel='nofollow' class='mkup_a' href='http://prdownloads.sourceforge.net/tcl/tcl8.6.16-src.tar.gz'>L4 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li><li class='mkup_li'>tk8.6.16-src.tar.gz [<a rel='nofollow' class='mkup_a' href='http://prdownloads.sourceforge.net/tcl/tk8.6.16-src.tar.gz'>L5 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li></UL><h3 id='13a8e465e34037b7d0212f04a7aee83a1ee2b79d8c485bb1e8424027e1260a36' class='mkup_h2'>Tools:</h3><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_1' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_1' class='sh_tcl sh_sourceCode'> which gcc /usr/bin/gcc which python3 /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 which unzip /usr/bin/unzip which install_name_tool /usr/bin/install_name_tool which otool /usr/bin/otool # unzip tk8.6.16-src.tar.gz </pre></div><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_2' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_2' class='sh_tcl sh_sourceCode'> gcc --version Apple clang version 16.0.0 (clang-1600.0.26.6) Target: arm64-apple-darwin24.3.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin python3 --version Python 3.10.5 </pre></div><h3 id='28ded1693baed2dd35e6a19b257f6084599c39ce5f5d4314906c58d078582d46' class='mkup_h2'>Prepare to compile a Tcl/Tk-Framework</h3><h4 id='1c4d983a09fea9606a0c1ca84ff988fcf54427ebb683ca53f7cd441fee66f861' class='mkup_h3'>Sources</h4><p class='mkup_p'>extract sources for tcl and tk:</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_3' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_3' class='sh_tcl sh_sourceCode'> .../myWorkDir │ ├── tcl8616 │ ├── tcl8.6.16 │ │ ├── compat │ │ ├── doc │ │ ├── generic │ │ ├── library │ │ ├── libtommath │ │ ├── macosx │ │ ├── pkgs │ │ │ ├── itcl4.3.2 │ │ │ ├── sqlite3.47.2 │ │ │ ├── tdbc1.1.10 │ │ │ └── ... │ │ ├── tests │ │ ├── tools │ │ ├── unix │ │ └── win │ │ │ └── tk8.6.16 │ ├── bitmaps │ ├── compat │ ├── doc │ ├── generic │ ├── library │ └── ... │ └── tclbuild.sh </pre></div> <h4 id='e61a548a8622ddd222b521ad1f2bf6e8f0d14352bddd61656aeedafe68f5e63a' class='mkup_h3'>tclbuild.sh</h4><p class='mkup_p'>based on a template I found here: </p><UL class='mkup_UL'><li class='mkup_li'>stackoverflow.com [<a rel='nofollow' class='mkup_a' href='https://stackoverflow.com/questions/53777217/find-precompiled-or-compile-tcl-tk-frameworks-for-macos'>L6 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li><li class='mkup_li'>tclbuild.sh</li></UL><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_4' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_4' class='sh_tcl sh_sourceCode'> #!/bin/bash # # ./tclbuild.sh # macosxminver=11.0 sver=8616 ver=8.6.16 mver=8.6 tclmver=$mver tkmver=$mver SRCDIR=$HOME/Development/tcl_lang/tcl${sver} INSTLOC=$HOME/Development/tcl_lang/install if [[ $1 != &quot;&quot; ]]; then INSTLOC=$1 fi if [[ -d $INSTLOC ]]; then rm -rf $INSTLOC fi mkdir $INSTLOC cd $SRCDIR test -d build &amp;&amp; rm -rf build cd $SRCDIR cd tcl${ver} if [[ $? -eq 0 ]]; then f=library/init.tcl if [[ ! -f $f-orig ]]; then cp -pf $f $f-orig fi cp -pf $f-orig $f make -C macosx \ PREFIX=&quot;&quot; \ CFLAGS_OPTIMIZE=&quot; -arch x86_64 -arch arm64 -mmacosx-version-min=${macosxminver}&quot; \ INSTALL_ROOT=$INSTLOC install # CFLAGS_OPTIMIZE=&quot;-O2 -mmacosx-version-min=${macosxminver}&quot; cd $SRCDIR chmod u+w $INSTLOC/bin/tclsh${tclmver} install_name_tool -change \ &quot;/Library/Frameworks/Tcl.framework/Versions/${tclmver}/Tcl&quot; \ @executable_path/../Library/Frameworks/Tcl.framework/Versions/${tclmver}/Tcl \ $INSTLOC/bin/tclsh${tclmver} fi cd $SRCDIR cd tk${ver} if [[ $? -eq 0 ]]; then make -C macosx \ PREFIX=&quot;&quot; \ CFLAGS_OPTIMIZE=&quot; -arch x86_64 -arch arm64 -mmacosx-version-min=${macosxminver}&quot; \ INSTALL_ROOT=$INSTLOC install # CFLAGS_OPTIMIZE=&quot;-O2 -mmacosx-version-min=${macosxminver}&quot; cd $SRCDIR chmod u+w $INSTLOC/Library/Frameworks/Tk.framework/Versions/${tkmver}/Resources/Wish.app/Contents/MacOS/Wish install_name_tool -change \ &quot;/Library/Frameworks/Tk.framework/Versions/${tkmver}/Tk&quot; \ @executable_path/../../../../Tk \ $INSTLOC/Library/Frameworks/Tk.framework/Versions/${tkmver}/Resources/Wish.app/Contents/MacOS/Wish install_name_tool -change \ &quot;/Library/Frameworks/Tcl.framework/Versions/${tclmver}/Tcl&quot; \ @executable_path/../../../../../../../Tcl.framework/Versions/${tclmver}/Tcl \ $INSTLOC/Library/Frameworks/Tk.framework/Versions/${tkmver}/Resources/Wish.app/Contents/MacOS/Wish fi cd $SRCDIR find $INSTLOC -type f -print0 | xargs -0 chmod u+w exit 0 </pre></div><h4 id='03a67d05cfe27a78de316d5b4a5215391f3ef564d8ab48320a5f9bc9f65d08c8' class='mkup_h3'>compile Tcl/Tk-Framework</h4><p class='mkup_p'>let the compiler do its job now &hellip;</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_5' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_5' class='sh_tcl sh_sourceCode'> cd .../myWorkDir/ %./tclbuild.sh &gt;&gt; ... &gt;&gt; ... &gt;&gt; &gt;&gt; scanning section Tk Commands, version 8.6.16 &gt;&gt; shuffling ttk_widget.n to front of processing queue &gt;&gt; shuffling options.n to front of processing queue &gt;&gt; ..................................... &gt;&gt; menubar: make-manpage-section: discarding menubar &gt;&gt; ...... &gt;&gt; pack-old: make-manpage-section: discarding pack-old &gt;&gt; ............................................ &gt;&gt; scanning section Tk C API, version 8.6.16 &gt;&gt; ....................................................................................... &gt;&gt; Assembling index &gt;&gt; Rescanning 173 pages to build cross links and write out &gt;&gt; ...................................................................................................................... &gt;&gt; Done </pre></div><h3 id='0e08f4ac2a698201a070f8b4929fed9527e20620d9cbebdb952e880b1aec9528' class='mkup_h2'>Result of compilation:</h3><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_6' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_6' class='sh_tcl sh_sourceCode'> .../myWorkDir │ ├── tcl8616 │ ├── build │ ├── tcl8.6.16 │ └── tk8.6.16 │ └── install │ ├── Applications │ └── Utilities │ ├── Wish\ Shell.app ---&gt; Wish.app │ └── Wish.app ---&gt; .//../..//Library/Frameworks/Tk.framework/Resources/Wish.app ├── Library │ ├── Frameworks │ │ ├── Tcl.framework │ │ │ ├── Headers ---&gt; Versions/Current/Headers │ │ │ ├── PrivateHeaders ---&gt; Versions/Current/PrivateHeaders │ │ │ ├── Resources ---&gt; Versions/Current/Resources │ │ │ └── Versions │ │ │ ├── 8.6 │ │ │ │ ├── Headers │ │ │ │ ├── PrivateHeaders │ │ │ │ ├── Resources │ │ │ │ │ ├── Documentation │ │ │ │ │ │ └── Reference │ │ │ │ │ │ └── Tcl │ │ │ │ │ │ └── ... │ │ │ │ │ ├── Scripts │ │ │ │ │ │ ├── encoding │ │ │ │ │ │ ├── http1.0 │ │ │ │ │ │ └── opt0.4 │ │ │ │ │ └── tcl8 │ │ │ │ │ ├── 8.4 │ │ │ │ │ ├── 8.5 │ │ │ │ │ └── 8.6 │ │ │ │ └── pkgconfig │ │ │ └── Current ---&gt; 8.6 │ │ └── Tk.framework │ │ ├── Headers ---&gt; Versions/Current/Headers │ │ ├── PrivateHeaders ---&gt; Versions/Current/PrivateHeaders │ │ ├── Resources ---&gt; Versions/Current/Resources │ │ └── Versions │ │ ├── 8.6 │ │ │ ├── Headers │ │ │ │ └── X11 │ │ │ ├── PrivateHeaders │ │ │ ├── Resources │ │ │ │ ├── Documentation │ │ │ │ │ └── Reference │ │ │ │ │ └── Tk │ │ │ │ │ └── ... │ │ │ │ ├── Scripts │ │ │ │ │ └── ... │ │ │ │ ├── Wish Shell.app ---&gt; Wish.app │ │ │ │ └── Wish.app │ │ │ │ └── Contents │ │ │ │ ├── MacOS │ │ │ │ └── Resources │ │ │ └── pkgconfig │ │ └── Current ---&gt; 8.6 │ └── Tcl │ ├── itcl4.3.2 │ ├── sqlite3.47.2 │ ├── tcl8 │ ├── tdbc1.1.10 │ ├── tdbcmysql1.1.10 │ ├── tdbcodbc1.1.10 │ ├── tdbcpostgres1.1.10 │ └── thread2.8.11 ├── bin ├── include └── man ├── man3 └── mann </pre></div><h4 id='c541eec62df03247e08aea4f622c7c44a9eb49e37e1a64cb5c65fbc5596d8e22' class='mkup_h3'>Test the Result</h4><p class='mkup_p'>We are looking for a Wish.app</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_7' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_7' class='sh_tcl sh_sourceCode'> cd .../myWorkDir/ open ./install/Applications/Utilities/Wish.app # is a link to: ./../../Library/Frameworks/Tk.framework/Resources/Wish.app # ... failed ??? open ./install/Library/Frameworks/Tk.framework/Resources/Wish.app # is a link to: Versions/Current/Resources # ... OK open ./install/Library/Frameworks/Tk.framework/Versions/Current/Resources/Wish.app # ... OK # ... this is the template we will use in the next step # </pre></div><h2 id='4b44872941d28cba7e1a5309fe0bc041880f645c7bf2d017d3afa318a172a0d3' class='mkup_h1'>Extract a standalone Wish.app</h2><h3 id='5edad062258b489191c7119ea4fcfc0c8691e04659d5620836982232c9393baa' class='mkup_h2'>What is needed</h3><p class='mkup_p'>&hellip; a standalone Wish.app with a given structure. We name it myApp.app.</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_8' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_8' class='sh_tcl sh_sourceCode'> .../myWorkDir │ └── myApp.app └── Contents ├── Info.plist ├── Frameworks/ │ ├── Tcl.framework/ │ ├── Tk.framework/ ├── Tcl │ └── ... ├── MacOS/ │ └── myApp └─── Resources/ └── myApp.icns </pre></div><h4 id='976e873796ef90d2c094a6041bf1dc9b0ab871e356225f00a5b861d996ff3bbf' class='mkup_h3'>Create myApp.app</h4><p class='mkup_p'>We use the compiled result as a base.</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_9' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_9' class='sh_tcl sh_sourceCode'> cd .../myWorkDir cp -Rf ./install/Library/Frameworks/Tk.framework/Resources/Wish.app ./myApp.app mkdir -p ./myApp.app/Contents/Frameworks cp -Rf ./install/Library/Frameworks/Tk.framework ./myApp.app/Contents/Frameworks cp -Rf ./install/Library/Frameworks/Tcl.framework ./myApp.app/Contents/Frameworks mkdir -p ./myApp.app/Contents/Library cp -Rf ./install/Library/Tcl ./myApp.app/Contents/Library/Tcl </pre></div><p class='mkup_p'>Now we have to test our app</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_10' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_10' class='sh_tcl sh_sourceCode'> open ./myApp.app # # -&gt; failed # </pre></div><h4 id='9168888d041c4d7b7de9560045bec97f26e722dee9bdf154eeb4a9c3cd4c3fb9' class='mkup_h3'>Debug our App</h4><p class='mkup_p'>&hellip; but don&rsquo;t panic</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_11' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_11' class='sh_tcl sh_sourceCode'> # # ------------------------------------- # Translated Report (Full Report Below) # ------------------------------------- # # Process: Wish [5329] # Path: .../*/Wish.app/Contents/MacOS/Wish # Identifier: com.tcltk.wish # Version: 8.6.16 (8.6.16) # Code Type: ARM-64 (Native) # # Crashed Thread: 0 # # Exception Type: EXC_CRASH (SIGABRT) # Exception Codes: 0x0000000000000000, 0x0000000000000000 # # Termination Reason: Namespace DYLD, Code 1 Library missing # Library not loaded: @executable_path/../../../../Tk # Referenced from: &lt;E91A1C5F-BF22-3AB4-87AA-F312F03B9FDE&gt; .../*/myApp.app/Contents/MacOS/Wish # Reason: tried: '.../Tk' (no such file) # (terminated at launch; ignore backtrace) # </pre></div><p class='mkup_p'>The reason for this, are the libraries searched for in our executable in our app.</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_12' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_12' class='sh_tcl sh_sourceCode'> otool -L ./myApp.app/Contents/MacOS/Wish # # /Users/manfred/Development/tcl_lang/Wish.app/Contents/MacOS/Wish (architecture x86_64): # @executable_path/../../../../Tk (compatibility version 8.6.0, current version 8.6.16) # @executable_path/../../../../../../../Tcl.framework/Versions/8.6/Tcl (...) # /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1351.0.0) # ... #</pre></div><p class='mkup_p'>We see that the executable is unable to find Tk and Tcl. We have to change these references:</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_13' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_13' class='sh_tcl sh_sourceCode'> install_name_tool -change \ @executable_path/../../../../Tk \ @executable_path/../Frameworks/Tk.framework/Versions/8.6/Tk \ ./myApp.app/Contents/MacOS/Wish install_name_tool -change \ @executable_path/../../../../../../../Tcl.framework/Versions/8.6/Tcl \ @executable_path/../Frameworks/Tcl.framework/Versions/8.6/Tcl \ ./myApp.app/Contents/MacOS/Wish </pre></div><p class='mkup_p'>We test again</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_14' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_14' class='sh_tcl sh_sourceCode'> open ./myApp.app # # -&gt; OK # </pre></div><p class='mkup_p'><img alt='https://i.imgur.com/Glw8gZL.png|png|jpg' src='https://i.imgur.com/Glw8gZL.png|png|jpg' onerror="this.src='/plume404.png'"></p> <h4 id='45ae880b81fb0fb168f2e4fe82ec8aa1071789f47941700c3692db32c29e2ee5' class='mkup_h3'>Make our app running Tcl-Code</h4><p class='mkup_p'>... myApp.app should not only work as an interpreter. It shall run our own Tcl/Tk-Application. We must extend our app with some tcl-Scripts: </p><UL class='mkup_UL'><li class='mkup_li'>AppMain.tcl (mandatory) and </li><li class='mkup_li'>myApp.tcl</li></UL><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_15' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_15' class='sh_tcl sh_sourceCode'> .../myWorkDir │ └── myApp.app └── Contents ├── Info.plist ├── Frameworks │ ├── Tcl.framework │ └── Tk.framework ├── Library │ └── Tcl │ └── ... ├── MacOS │ └── myApp └── Resources ├── myApp.icns └── Resources │ └── Scripts └── AppMain.tcl </pre></div><p class='mkup_p'>&hellip; but we'll do a little more</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_16' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_16' class='sh_tcl sh_sourceCode'> .../myWorkDir │ └── myApp.app └── Contents ├── Info.plist ├── Frameworks/ │ ├── Tcl.framework/ │ └── Tk.framework/ ├── MacOS/ │ └── myApp ├── Library │ └── Tcl │ ├── itcl4.3.2 │ ├── sqlite3.47.2 │ ├── tcl8 │ └── ... └── Resources/ ├── myApp.icns └── Resources │ └── Scripts ├── AppMain.tcl ├── bin │ └── myApp.tcl └── lib └── ... </pre></div><p class='mkup_p'>so we have to prepare our app and add some files</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_17' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_17' class='sh_tcl sh_sourceCode'> mkdir -p ./myApp.app/Contents/Resources/Scripts/bin mkdir -p ./myApp.app/Contents/Resources/Scripts/lib touch ./myApp.app/Contents/Resources/Scripts/AppMain.tcl touch ./myApp.app/Contents/Resources/Scripts/bin/myApp.tcl # vi ./myApp.app/Contents/Resources/Scripts/AppMain.tcl # vi ./myApp.app/Contents/Resources/Scripts/bin/myApp.tcl </pre></div><p class='mkup_p'>&hellip;/Scripts/AppMain.tcl</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_18' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_18' class='sh_tcl sh_sourceCode'> # # &hellip;/Scripts/AppMain.tcl # # set __script_Dir___ [file dirname [info script]] set __script__Tcl__ [file normalize [file join $__script_Dir___ .. .. Library Tcl]] set __script__Lib__ [file normalize [file join $__script_Dir___ lib]] # lappend auto_path $__script__Tcl__ lappend auto_path $__script__Lib__ # puts &quot; -- \$auto_path -- &quot; foreach dir $auto_path { puts &quot; $dir&quot; } # # ... check availability of itcl # if [file exists [file join $__script__Tcl__ itcl4.3.2]] { set env(ITCL_LIBRARY) [file join $__script__Tcl__ itcl4.3.2] } else { puts &quot; package: itcl &quot; puts &quot; ... \$env(ITCL_LIBRARY) ... not available&quot; } # # ... check availability of Tk # # if [file exists [file join $__script__Lib__ itk4.2.5]] { # set env(ITK_LIBRARY) [file join $__script__Lib__ itk4.2.5] # } else { # puts &quot; package: itk &quot; # puts &quot; ... \$env(ITK_LIBRARY) ... not available&quot; # } # puts &quot; -- \$__script_Dir___ --&quot; puts &quot; $__script_Dir___ \n&quot; puts &quot;&quot; # source [file join $__script_Dir___ bin myApp.tcl] # # package require starkit # starkit::startup # source [file join $__script_Dir___ __myApp.kit] # </pre></div><p class='mkup_p'>&hellip;/Scripts/bin/myApp.tcl</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_19' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_19' class='sh_tcl sh_sourceCode'> # # &hellip;/Scripts/bin/myApp.tcl # # package require Tk # Create the main window wm title . &quot;myApp @ Tcl/Tk - Framework-Wish.app&quot; wm geometry . 600x300+100+100 # Procedure to report Environment to the Text widget proc reportEnv {} { .textWidget delete 1.0 end .textWidget insert end &quot;\n&quot; .textWidget insert end &quot;--- auto_path ---\n&quot; .textWidget insert end &quot;\n&quot; foreach dir $::auto_path { .textWidget insert end &quot; ... $dir\n&quot; } .textWidget insert end &quot;\n&quot; .textWidget insert end &quot;--- env ---\n&quot; .textWidget insert end &quot;\n&quot; .textWidget insert end [format { ... %-15s -&gt; %s} ITCL_LIBRARY $::env(ITCL_LIBRARY)]\n .textWidget insert end &quot;\n&quot; .textWidget insert end &quot;--- env ---\n&quot; .textWidget insert end &quot;\n&quot; foreach name [array names ::env] { .textWidget insert end [format { ... %-15s -&gt; %s} $name $::env($name)]\n } .textWidget insert end &quot;\n\n ... done!\n&quot; } # Procedure to load Packages proc requirePackages {} { puts &quot;\n&quot; puts &quot; ... load packages&quot; puts &quot;&quot; puts &quot; ... load Itcl&quot; package require Itcl puts &quot;&quot; puts &quot; ... done&quot; } # Create a button to report Environment button .buttonEnv -text &quot; report Environment &quot; -command {reportEnv} # Create a button to require Packages button .buttonPkg -text &quot; require Packages &quot; -command {requirePackages} # Create a frame to hold the Text widget and scrollbars # frame .textFrame # Create a Text widget with scrollbars text .textWidget -width 120 -height 25 -yscrollcommand {.yScroll set} -xscrollcommand {.xScroll set} scrollbar .yScroll -orient vertical -command {.textWidget yview} scrollbar .xScroll -orient horizontal -command {.textWidget xview} grid .textWidget .yScroll -sticky news grid .xScroll -sticky news # Configure grid weights grid rowconfigure . 0 -weight 1 grid columnconfigure . 0 -weight 1 # Grid the button in the main window grid .buttonEnv -row 2 -column 0 -columnspan 2 -pady 2 -ipadx 10 grid .buttonPkg -row 3 -column 0 -columnspan 2 -pady 2 -ipadx 10 </pre></div><p class='mkup_p'>&hellip;/Scripts/lib ... reserved to place additional packages required by your application and are not provided by this TclTk-Framework</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_20' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_20' class='sh_tcl sh_sourceCode'> tcllib, tdom, ... </pre></div><p class='mkup_p'>Test your application</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_21' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_21' class='sh_tcl sh_sourceCode'> open ./myApp.app # # -&gt; OK # </pre></div><p class='mkup_p'><img alt='https://i.imgur.com/3Jrf5Md.png|png|jpg' src='https://i.imgur.com/3Jrf5Md.png|png|jpg' onerror="this.src='/plume404.png'"></p> <h2 id='aad6fe48d5370e8ccdf1e4c104580cf80530b22e42f9d684274cb344751085f5' class='mkup_h1'>Codesigning and notarization</h2><p class='mkup_p'>Before start codesigning you have to unlock your signing-keychain</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_22' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_22' class='sh_tcl sh_sourceCode'> security unlock-keychain login.keychain # # -&gt; requires a Developer-ID and a password #</pre></div><p class='mkup_p'>Lets do the codesigning not on the original myApp but do it in a copy. The following manual is inspired from a proposal of Kevin Walzer [<a rel='nofollow' class='mkup_a' href='https://www.codebykevin.com'>L7 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</p><h3 id='791a3b07c3af0a3b9294fb78fe9139e7271cf0845a457ae2ff4ded0fc20e2305' class='mkup_h2'>Requirements</h3><h4 id='aaa6e9d4297e012571ee1baa96fd83698bffa1512689066fc1fe0e3fb3e5b5d7' class='mkup_h3'>Apple Developer ID:</h4><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_23' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_23' class='sh_tcl sh_sourceCode'> security find-identity -p codesigning Policy: Code Signing Matching identities 1) &hellip; 2) &hellip; 3) ABC12345A1B23456789012345678901234567890 &quot;Developer ID Application: Small Feather (1AB2CD3EF5)&quot; 3 identities found Valid identities only 1) ABC12345A1B23456789012345678901234567890 &quot;Developer ID Application: Small Feather (1AB2CD3EF5)&quot; 1 valid identities found </pre></div><h4 id='aea303d2a588b286455b0d3607254b4b0ffe03d82c0ff55a759901af8ead4981' class='mkup_h3'>Notarization Profile</h4><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_24' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_24' class='sh_tcl sh_sourceCode'> xcrun notarytool store-credentials &lt;profile-name&gt; \ --apple-id &quot;&lt;your-apple-id&gt;&quot; \ --team-id &quot;&lt;your-team-id&gt;&quot; \ --password &quot;&lt;your-app-specific-password&gt;&quot; xcrun notarytool store-credentials &quot;myNotarizationProfile&quot; \ --apple-id &quot;<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9fefedfaf1fef2fab1eceaedf1fef2fadffbf0f2fef6f1b1fcf0f2">[email&#160;protected]</a>&quot; \ --team-id &quot;1AB2CD3EF5&quot; \ --password &quot;abcd-efgh-ijkl-mnop&quot; # # in this manual: &lt;profile-name&gt; myNotarizationProfile #</pre></div><h4 id='22124e76cda7c43f8c2406322edd12cb0b4c1fc664fd3d7ebb0ee0941668d944' class='mkup_h3'>entitlements.plist</h4><p class='mkup_p'>... please care about unix linefeeds !?!? ... do not ask!!</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_25' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_25' class='sh_tcl sh_sourceCode'> .../myWorkDir │ ├── tcl8616 ├── install ├── myApp.app │ └── ... ├── build │ └── myApp.app ├── tclbuild.sh │ └── entitlements.plist </pre></div><p class='mkup_p'>./entitlements.plist</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_26' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_26' class='sh_tcl sh_sourceCode'> &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;!DOCTYPE plist SYSTEM &quot;file://localhost/System/Library/DTDs/PropertyList.dtd&quot;&gt; &lt;plist version=&quot;0.9&quot;&gt; &lt;dict&gt; &lt;key&gt;com.apple.security.app-sandbox&lt;/key&gt; &lt;false/&gt; &lt;key&gt;com.apple.security.automation.apple-events&lt;/key&gt; &lt;true/&gt; &lt;key&gt;com.apple.security.cs.allow-jit&lt;/key&gt; &lt;true/&gt; &lt;key&gt;com.apple.security.cs.disable-library-validation&lt;/key&gt; &lt;true/&gt; &lt;key&gt;com.apple.security.get-task-allow&lt;/key&gt; &lt;true/&gt; &lt;/dict&gt; &lt;/plist&gt; </pre></div><h3 id='0c8a8dc05eb789e6d9b03e2ccb194622156b6a4783c507a8a171bd491d426754' class='mkup_h2'>... now step by step </h3><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_27' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_27' class='sh_tcl sh_sourceCode'> cd .../myWorkDir mkdir build cp -Rf myApp.app ./build/myApp.app # # ... cleanup ./build/myApp.app # xattr -cr ./build/myApp.app # ... if neccessary # python3 -mmacholib standalone ./build/myApp.app rm -rf ./build/myApp.app/Contents/Frameworks/Tcl.framework/Versions/8.6/Resources/Documentation rm -rf ./build/myApp.app/Contents/Frameworks/Tk.framework/Versions/8.6/Resources/Documentation rm -rf ./build/myApp.app/Contents/Frameworks/Tk.framework/Versions/8.6/Resources/Wish.app rm -rf ./build/myApp.app/Contents/Frameworks/Tk.framework/Versions/8.6/Resources/&quot;Wish Shell.app&quot; rm -rf ./build/myApp.app/Contents/MacOS/&quot;Wish Shell&quot; find ./build/myApp.app -name &quot;*.a&quot; -exec rm -rf {} \; find ./build/myApp.app -name &quot;*debug&quot; -exec rm -rf {} \; find ./build/myApp.app -name &quot;*.sh&quot; -exec rm -rf {} \; chmod -R a+rw ./build/myApp.app # # ... codesign ./build/myApp.app # find ./build/myApp.app -type f -name &quot;*.bundle&quot; -exec \ codesign --verbose -f \ --signature-size 9400 \ --sign &quot;Developer ID Application&quot; {} \; find ./build/myApp.app -type f -name &quot;*.dylib&quot; -exec \ codesign --verbose -f \ --signature-size 9400 \ --sign &quot;Developer ID Application&quot; {} \; codesign --verbose -f \ --signature-size 9400 \ --sign &quot;Developer ID Application&quot; \ ./build/myApp.app/Contents/Frameworks/Tk.framework/Versions/8.6 codesign --verbose -f \ --signature-size 9400 \ --sign &quot;Developer ID Application&quot; \ ./build/myApp.app/Contents/Frameworks/Tcl.framework/Versions/8.6 codesign --verbose=2 -f --deep --timestamp \ --signature-size 9400 \ --sign &quot;Developer ID Application&quot; \ --options runtime \ --entitlements ./entitlements.plist \ ./build/myApp.app # # ... check entitlements # codesign -d --entitlements - ./build/myApp.app # # ... create a zip for notarization # cd ./build ditto -c -k --sequesterRsrc --keepParent \ myApp.app \ myApp_Setup.zip # # ... notarize your app # xcrun notarytool submit myApp_Setup.zip \ --keychain-profile myNotarizationProfile \ --wait # # ... in notarization was successful, staple your app # xcrun stapler staple myApp.app # # &hellip; build a .dmg-container to deliver your app # hdiutil create -srcfolder myApp.app -volname myApp_Demo myApp_Demo_$$.dmg cd ../ # # ... Done. #</pre></div><h3 id='df3426ab4257c97b124853a696005db04500e4e108ec060850006e3cbb1bf398' class='mkup_h2'>some additional commands</h3><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_28' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_28' class='sh_tcl sh_sourceCode'>plutil myApp.app/Contents/Info.plist lldb myApp.app ...</pre></div><hr class='mkup_hr'><h2 id='60157cfcfe3f31c32f2c6394ad10f941a4b32c0be68151d35054c9230295fbc6' class='mkup_h1'>Discussions</h2><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/TR'>TR</a>: my experience:</p> <UL class='mkup_UL'><li class='mkup_li'>do not use the built-in version but install your own recent Tcl 8.6 (I just compile from the sources myself)</li><li class='mkup_li'>build applications using the bundle facility of macOS, here is a recipe -&gt; <a rel='nofollow' class='mkup_a' href='https://www.codebykevin.com/tutorial.html'>https://www.codebykevin.com/tutorial.html <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></li><li class='mkup_li'>code-signing a macOS app can be done with a self-signed signature using the <span class='mkup_tt'>codesign</span> utility (<span class='mkup_tt'>codesign --force --deep -s - $exeFile</span>) but this will still trigger a warning as the certificate is not a paid one (you only get full peace of mind when you pay Apple $ 100 per year)</li><li class='mkup_li'>What particular performance issues do you have?</li></UL><p class='mkup_p'>Otherwise, make sure to check the <a class='mkup_a mkup_known' href='/page/New+Tcl%2FTkAqua+FAQ'>New Tcl/TkAqua FAQ</a> (and yes, it needs an update!)</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> - 2025-01-10 21:55:20</b></p><p class='mkup_p'>I tried to codesign &quot;vanillawish&quot;,&quot;tclkit&quot; and a single &quot;wish&quot; and &quot;tclsh&quot;. my observation:</p><UL class='mkup_UL'><li class='mkup_li'>I could codesign &quot;wish&quot; and &quot;tclsh&quot; </li><li class='mkup_li'>but could not codesign &quot;vanillawish&quot; and &quot;tclkit&quot;.</li></UL><p class='mkup_p'>I fear this observation is based on, that codesign does not sign binaries with a payload. If this is the case &quot;vanillawish&quot; and &quot;tclkit&quot; are no oportunity to provide a tcl-runtime with batteries included for MacOS apps.</p><UL class='mkup_UL'><li class='mkup_li'>the --deep option should no longer be used</li></UL><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ALX'>ALX</a> I assume that all files embedded into the VFS must be code-signed first. Afterwards, the executable needs to be signed.</p><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> - 2025-01-29 15:00:00</b></p><p class='mkup_p'>I found an approach used to build <b class='mkup_b'>tkChat </b>for MacOS:</p><UL class='mkup_UL'><li class='mkup_li'>TclApps Library Source Code [<a rel='nofollow' class='mkup_a' href='https://core.tcl-lang.org/tclapps/file?name=apps/tkchat/deploy/buildapp_mac&ci=tip'>L8 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li></UL><p class='mkup_p'>and a manual</p><UL class='mkup_UL'><li class='mkup_li'>Building Stand-Alone Tcl/Tk Applications under Mac OS X [<a rel='nofollow' class='mkup_a' href='https://wiki.tcl-lang.org/page/Building+Stand-Alone+Tcl%2FTk+Applications+under+Mac+OS+X'>L9 <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>]</li></UL><p class='mkup_p'>This approach requires <b class='mkup_b'>wish.app</b> as template</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_29' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_29' class='sh_tcl sh_sourceCode'> wish.app/ Contents/ Info.plist Frameworks/ Tcl.framework/ Tk.framework/ MacOS/ wish Resources/ wish.icns</pre></div><p class='mkup_p'>to use this template with the name <b class='mkup_b'>myApp</b> all <b class='mkup_b'>whish</b> should be renamed to e.g. <b class='mkup_b'>myApp</b></p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_30' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_30' class='sh_tcl sh_sourceCode'> myApp.app/ Contents/ Info.plist Frameworks/ Tcl.framework/ Tk.framework/ MacOS/ myApp Resources/ myApp.icns</pre></div><p class='mkup_p'>... and if I got it right: </p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_31' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_31' class='sh_tcl sh_sourceCode'> ./myApp.app/Contents/MacOS/myApp</pre></div><p class='mkup_p'>is a nearly native</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_32' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_32' class='sh_tcl sh_sourceCode'>wish</pre></div><p class='mkup_p'>looking for a tcl-script</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_33' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_33' class='sh_tcl sh_sourceCode'> ./myApp.app/Resources/Scripts/AppMain.tcl (or main.tcl???)</pre></div><p class='mkup_p'>my Question: </p><p class='mkup_p'>... is there anybody out there, providing a wish.app as a template (for tcl 8.6)?</p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ABU'>ABU</a> 16-02-2025</p><p class='mkup_p'>Instead of building a tcltk interpreter for MacOS (it's always a long and complex task), I just downloaded a &quot;single-file-snapshot' from github. This is a fully working 'wish' 9.0.2</p><pre class='mkup_pre'> https://github.com/tcltk/tk/actions/runs/13280568013</pre><p class='mkup_p'>Then I can start to create macOS App, just by packing this executable and my specific scripts (Tcl plus some binary libraries).</p><p class='mkup_p'>Well , this is just the start of the story .. the problem is that I have no intention to pay a Developer License to Apple just to deliver some open-source apps. Here is a full dmg you can download, install and run ... but there're many manual steps required you should do to pass all the security checks.</p><pre class='mkup_pre'> https://sourceforge.net/projects/irrational-numbers/files/Caligraft/Caligraft2025.dmg/download</pre><p class='mkup_p'>I will be grateful to anyone who tries to test this app. (Note: it's for Intel-Mac ; I don't know how it works on new Apple processors).</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/TR'>TR</a> - 2025-02-16 I have tried to open the app on macOS 15.2 (Sequoia; M2 processor). I was able to get it running, finally. First, I got the message that &quot;Apple could not check whether the app is free from malicious software&quot;. I could circumvent this with the usual methods (context menu). Also, calling the wrapper under &quot;Contents &gt; MacOS&quot; directly from the command line did not help. I then needed to go into the system settings, and under privacy I needed to explicitly allow the app. After this, it worked.</p><p class='mkup_p'>reply to <a class='mkup_a mkup_known' href='/page/TR'>TR</a> - 2025-02-16 by <a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> for MacOS Sequioa</p><UL class='mkup_UL'><li class='mkup_li'>its confusing, but make it run on your &quot;Developer Mac&quot; does not mean that the same app will also run on another Mac</li><li class='mkup_li'>you have to codesign and notarize your app, to prevent the Systems &amp; Security settings</li></UL><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ABU'>ABU</a> Great ! Could you explain what you did into system settings ? I've heard something like &quot;xattr -d com.apple.quarantine ..all files..&quot; , isn't it enough ? Just last question (some beta users told me it didn't work ...) : First, you run the 'main app' (it's just a simple Tk panel with some images), but then, were you able to launch the real demos by double-clicking over one of the images ?</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/TR'>TR</a> - I used the GUI app and navigated to &quot;Privacy $ Security&quot; (it might be called slightly different - I am using a German macOS), then I scrolled Doen to the bottom of that page. There, macOS lists the Caligraft app (since I had tried to open it, otherwise it would not pop up there) and gives me the opportunity to to click on a button to allow running this app anyway). The method using <span class='mkup_tt'>xattr</span> is nice but nothing you can tell your normal users ... I was not able to run the real demos. Double-clicking results in another instance if Calicraft launching (so it seems judging be the icon that comes up) which then died after less than a second. I see no other window. However, when I start it from the command line, I get this:</p> <div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_34' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_34' class='sh_tcl sh_sourceCode'>Error in startup script: dlopen(/Applications/Caligraft2025.app/Contents/Caligraft2025/lib/blend2d-1.4/darwin-x64/tkb2d90.dylib, 0x0006): tried: '/Applications/Caligraft2025.app/Contents/Caligraft2025/lib/blend2d-1.4/darwin-x64/tkb2d90.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Applications/Caligraft2025.app/Contents/Caligraft2025/lib/blend2d-1.4/darwin-x64/tkb2d90.dylib' (no such file), '/Applications/Caligraft2025.app/Contents/Caligraft2025/lib/blend2d-1.4/darwin-x64/tkb2d90.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')) while executing &quot;load [BL::_findDLL $dir &quot;tkBlend2d&quot;] T2d&quot; (lambda term &quot; dir { source [file join $dir t2d.tcl] load [BL::_findDLL...&quot; line 3) invoked from within &quot;apply { dir { source [file join $dir t2d.tcl] load [BL::_findDLL $dir &quot;tkBlend2d&quot;] T2d package provide tkBlend2d 1.4 }} /Applications/Caligraft202...&quot; (&quot;package ifneeded tkBlend2d 1.4&quot; script) invoked from within &quot;package require -exact tkBlend2d $ver&quot; (lambda term &quot; dir { set ver 1.4 package require -exact tkBlend2d $ver ...&quot; line 3) invoked from within &quot;apply { dir { set ver 1.4 package require -exact tkBlend2d $ver package provide Blend2d $ver }} /Applications/Caligraft2025.app/Contents/Caligraft...&quot; (&quot;package ifneeded Blend2d 1.4&quot; script) invoked from within &quot;package require Blend2d 1.4&quot; (file &quot;/Applications/Caligraft2025.app/Contents/Caligraft2025/lalana-v1.tcl&quot; line 45) invalid command name &quot;::tkerror&quot; while executing &quot;::tkerror $err&quot;</pre></div><p class='mkup_p'>So, as I have an arm machine, I need the library compiled for arm, not for x86. That is because the app launches as an arm app (you have provided a fat binary with both architectures so the native one will take preceedence. But then of course, all libraries also need the same architecture, which the hay not.</p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> - 2025-02-19</p><p class='mkup_p'>Is it an approach to have every binary compiled for intel as long as not all tcl-packages (libraries) are also available for the arm architecture although your mac is a newer one?</p><p class='mkup_p'>MacOS handles opening your intel based app via Rosetta mode ...</p><p class='mkup_p'>I am looking for fat binaries (arm &amp; intel) of:</p><UL class='mkup_UL'><li class='mkup_li'>tcltls (8.6 &amp; 9.0 ... to connect to web-services and </li><li class='mkup_li'>vqtcl (8.6 &amp; 9.0 ... to open starkit from Wish.app</li></UL><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> - 2025-02-18</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_35' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_35' class='sh_tcl sh_sourceCode'>% pwd /Volumes/Caligraft Installer</pre></div><p class='mkup_p'>1) Info.plist</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_36' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_36' class='sh_tcl sh_sourceCode'>% cat Caligraft2025.app/Contents/Info.plist &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt; &lt;plist version=&quot;1.0&quot;&gt; &lt;dict&gt; &lt;key&gt;CFBundleName&lt;/key&gt; &lt;string&gt;xCaligraft&lt;/string&gt; &lt;key&gt;CFBundleExecutable&lt;/key&gt; &lt;string&gt;wrapper&lt;/string&gt; &lt;key&gt;CFBundleIdentifier&lt;/key&gt; &lt;string&gt;abu-irrational.github.com.Caligraft&lt;/string&gt; &lt;key&gt;CFBundleVersion&lt;/key&gt; &lt;string&gt;1.2.3&lt;/string&gt; &lt;key&gt;CFBundleIconFile&lt;/key&gt; &lt;string&gt;Caligraft2025.icns&lt;/string&gt; &lt;/dict&gt; &lt;/plist&gt;</pre></div><p class='mkup_p'>2) Caligraft2025.app/Contents/MacOS/wrapper ... is a shell script</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_37' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_37' class='sh_tcl sh_sourceCode'>#!/bin/bash DIR=&quot;$(dirname &quot;$0&quot;)&quot; $DIR/wish902 $DIR/../Caligraft2025/Caligraft.tcl</pre></div><p class='mkup_p'>3) Caligraft2025.app</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_38' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_38' class='sh_tcl sh_sourceCode'>% lldb Caligraft2025.app (lldb) target create &quot;Caligraft2025.app&quot; error: '/Volumes/Caligraft Installer/Caligraft2025.app/Contents/MacOS/wrapper' doesn't contain any 'host' platform architectures: arm64, armv7, armv7f, armv7k, armv7s, armv7m, armv7em, armv6m, armv6, armv5, armv4, arm, thumbv7, thumbv7k, thumbv7s, thumbv7f, thumbv7m, thumbv7em, thumbv6m, thumbv6, thumbv5, thumbv4t, thumb, x86_64, x86_64, arm64, arm64e, arm64, arm64e (lldb) </pre></div> <p class='mkup_p'>my conclusion:</p><UL class='mkup_UL'><li class='mkup_li'>since Macos Sequoia MacOS expects <b class='mkup_b'>CFBundleExecutable</b>: .../MacOS/<b class='mkup_b'>wrapper </b> as a binary and not as a shell-script (see: lldb Caligraft2025.app)</li><li class='mkup_li'>a script can not provide required platform architectures</li><li class='mkup_li'>MacOS Sequioa also does not accept a starpack as <b class='mkup_b'>CFBundleExecutable</b>, raises an error when codesigning</li><li class='mkup_li'>therfore this approach using Wish.app with its Tcl &amp; Tk-Framework structure</li><li class='mkup_li'>e.g. have a look on the TkChat.app <a rel='nofollow' class='mkup_a' href='http://tkchat.tcl-lang.org/'>TkChat.app <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></li></UL><p class='mkup_p'>The proposed structure for <b class='mkup_b'>Caligraft</b> could look like this. I havent done it yet, but follow the same steps as in this manual with Tcl9</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_39' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_39' class='sh_tcl sh_sourceCode'>.../myWorkDir │ └── Caligraft.app └── Contents ├── Info.plist ├── Frameworks/ │ ├── Tcl.framework/ │ └── Tk.framework/ ├── MacOS/ │ └── Caligraft (... just rename the file located here and update the reference in Info.plist) ├── Library │ └── Tcl │ ├── itcl4.3.2 │ ├── sqlite3.47.2 │ ├── tcl8 │ └── ... └── Resources/ ├── Caligraft .icns └── Resources │ └── Scripts ├── AppMain.tcl (... update this script to point to ./bin/Caligraft.kit) ├── bin │ └── Caligraft.kit └── lib └── ... </pre></div><p class='mkup_p'>... maybe you want to send me a personal message <a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a></p> <hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> - 2025-02-17</p><p class='mkup_p'>if an app is not codesigned and notarized by apple, MacOS sees your app as a threat. in Systems Privacy .. you can define an exception to run your app.</p><p class='mkup_p'>the second point is if you make your app run on your Mac does not mean that the same app runs on an other Mac.</p><p class='mkup_p'>... but works if it is signed and notarized only </p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ABU'>ABU</a> in reply to <a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a></p><p class='mkup_p'>I know and agree on the code-signed Apps. This is a question to solve, because I don't want to pay Apple for delivering free and open-source code, so, my advice was simply to find a way to deliver a beta-version to people with a low technical/hacking profile. </p><p class='mkup_p'>Second point: what do you mean &quot;-- if you make your app run on your Mac does not mean that the same app runs on an other Mac&quot; ? I delivered an App with no external dependencies; A full 'wish' interpreter, with all the required libraries (tcl and dylib) included. I built this App on my Intel-Mac, and then, as <a class='mkup_a mkup_known' href='/page/TR'>TR</a> pointed out above, it works even on M2-Mac. Well .. not on every Mac, and this is hard to discover, since I don't have another Mac; I'm just trying to collect response from beta-users. </p><p class='mkup_p'>All these troubles because *today* MacOS is still equipped with TclTk 8.5 !! There's no official/supported TclTk App for MacOS, and we cannot ask users to build Tcl and Tk themself.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> in reply to <a class='mkup_a mkup_known' href='/page/ABU'>ABU</a></p><p class='mkup_p'>&quot;if you make your app run on your Mac does not mean that the same app runs on an other Mac&quot;</p><p class='mkup_p'>Its the restrictive gatekeeper of MacOS Sequioa. For Test-Purpose I borrowed a MacOS from <a rel='nofollow' class='mkup_a' href='https://www.macincloud.com/'>macincloud <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a>.</p><p class='mkup_p'>It's just as confusing for me. I can't do the final user test for my app on my own Mac</p><p class='mkup_p'>Tcl 8.5 on Mac: <a rel='nofollow' class='mkup_a' href='https://brew.sh/'>Homebrew <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a> brings Tcl 9.0 to MacOS allready </p><hr class='mkup_hr'><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ALX'>ALX</a> - 2025-02-17</p><p class='mkup_p'>What <a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> has compiled here is truly a valuable contribution &ndash; a big kudos for that. The core issue is that macOS classifies programs that are not officially signed as potentially unsafe or even as malware. When I compile a program on my Mac, it is usually locally signed, so my system accepts the corresponding signature as trustworthy. However, when the same program is run on another Mac, this trust-building signature is missing, and the tightened security mechanisms kick in &ndash; often in the form of warning messages or even blocking of execution. These security precautions have been continuously tightened over the years to prevent the spread of malware. A comparable approach is now also found in Windows, where unsigned or not trustworthily certified programs are also considered potentially dangerous.</p><hr class='mkup_hr'><hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'><a class='mkup_a mkup_unknown' href='/_new?newpagename=NR'>NR</a> - 2025-02-18 09:16:03</b></p><p class='mkup_p'>ABU, you can try this (not tested) : <a rel='nofollow' class='mkup_a' href='https://signpath.org/'>https://signpath.org/ <span class='glyphicon glyphicon-globe' aria-hidden='true'></span></a></p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ABU'>ABU</a> This is a great idea, except that they require a complete CI Workflow to be implemented. And to do that, this would cost me much, much more than paying $100 for an Apple certificate.</p> <hr class='mkup_hr'><p class='mkup_p'><b class='mkup_b'> <a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> 2025-02-19 commenting <a class='mkup_a mkup_known' href='/page/ABU'>ABU</a> 16-02-2025</b></p><p class='mkup_p'>&gt;&gt;&gt; Instead of building a tcltk interpreter for MacOS (it's always a long and complex task), I just downloaded a &quot;single-file-snapshot' from github. This is a fully working 'wish' 9.0.2</p><div class='sh_sourceCode'><button class='copybtn btn pull-right' data-clipboard-target='#mkup_code_40' title='Click to copy code snippet to clipboard'><span class='glyphicon glyphicon-copy' aria-hidden='true'></span></button><pre id='mkup_code_40' class='sh_tcl sh_sourceCode'> https://github.com/tcltk/tk/actions/runs/13280568013</pre></div><p class='mkup_p'>is there also a link to download a snapshot?</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ABU'>ABU</a> Yes, but you need to be logged-in to download the snapshots.</p><p class='mkup_p'><a class='mkup_a mkup_known' href='/page/ManfredR'>ManfredR</a> Thanks. Did anyone try to build a MacOs-App based on this Wish?</p> </div> </div> <div class='row'> <div class='col-xs-12'> <div class='Footer'>Updated 2025-02-25 19:42:21</div> </div> </div> </div> <!-- jQuery library --> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.0/js/jquery.tablesorter.combined.js'></script> <!-- Latest compiled JavaScript --> <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'></script> <script type='text/javascript' src='/scripts/nikit.js'></script> <script type='text/javascript' src='/scripts/sh_main.js'></script> <script type='text/javascript' src='/scripts/sh_tcl.js'></script> <script type='text/javascript' src='/scripts/sh_c.js'></script> <script type='text/javascript' src='/scripts/sh_cpp.js'></script> <!-- <script src='https://www.google.com/recaptcha/api.js'></script> --> <script src='https://hcaptcha.com/1/api.js'></script> <script>var clipboard = new ClipboardJS('.copybtn', { text: function(trigger) { return document.querySelector(trigger.getAttribute('data-clipboard-target')).textContent + '\n'; } }); sort_tables(); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10