吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3397|回复: 8
收起左侧

[其他原创] 【shell】sh文件生成MacOS桌面可执行app

  [复制链接]
jjjzw 发表于 2021-8-3 17:08
本帖最后由 jjjzw 于 2021-8-3 17:12 编辑

使用了多年macOS后突然意识到,很少有应用程序会在桌面生成图标(像Windows那样),大多都从启动台和程序坞打开。
观察了一下我的桌面,发现有图标的可以是Application中应用程序的替身,也可以是一个app,运行后再运行指向的软件。
正好最近在使用破解版的BurpSuite,每次都需要将sh文件拖入终端运行,比较麻烦,于是想做一个app壳运行sh文件。

app结构


经过观察,最简单的app结构可以表示为:
(app-name).app
└── Contents
           └── MacOS
           │       └── 脚本
           └── Resources
           └── Info.plist

其中,脚本可以是unix可执行文件applet:

app1

app1

一眼看出这是脚本编辑器导出的应用程序包,用脚本编辑器打开app:是用AppleScript写的命令:
[AppleScript] 纯文本查看 复制代码
(*  Start *)


do shell script "open /Applications/Polyspace/R2020a/bin/matlab"

缺点:对于tell Terminal持续加载的软件,容易导致脚本编辑器无响应

第二种脚本是sh文件,Steam生成的游戏图标都是用这种方式:(PS:Steam生成的桌面图标一半都是损坏的,用本文的方法可以自己制做一个!

app2

app2

其中,run.sh保存了要运行的命令:
[Bash shell] 纯文本查看 复制代码
#!/bin/bash
# autogenerated file - do not edit

open steam://run/644560

这就是本文的目标!(欢迎大家猜猜644560是什么游戏

Info.plist是什么


要使用制作出的app,需要一个合格的Info.plist文件
这个文件实现了一些功能如:直接向用户展示信息;系统内部用来标识你的app或其支持的文档类型;系统框架用来辅助app的加载等
Info.plist简单结构

[Plain Text] 纯文本查看 复制代码
<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
        <plist version="1.0">
        <dict>
                <key>CFBundleExecutable</key>
                <string>run.sh</string>
                ······
        </dict>
        </plist>

其中key是属性,string是值,我们只需要一些必要的值就可以运行。(文后参考资料3

app生成脚本


掌握了结构,就可以写脚本添加到/usr/local/bin中供调用
touch appmake生成脚本文件
vim打开:
[Bash shell] 纯文本查看 复制代码
#!/usr/bin/env bash

APPNAME=${2:-$(basename "${1}" '.sh')};
DIR=$(dirname "${1}");
CON="${DIR}/${APPNAME}.app/Contents";
MAC="${DIR}/${APPNAME}.app/Contents/MacOS";
RES="${DIR}/${APPNAME}.app/Contents/Resources";
INF="${CON}/Info.plist";

if [ -a "${APPNAME}.app" ]; then
  echo "${PWD}/${APPNAME}.app already exists. Provide some unique name if you want to create it anyway. ";
  exit 1;
fi;

mkdir -p "${MAC}";
mkdir -p "${RES}"
cp "${1}" "${MAC}/run.sh";
chmod +x "${MAC}/run.sh";

cat>>"${INF}"<<EOF
<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
        <plist version="1.0">
        <dict>
                <key>CFBundleExecutable</key>
                <string>run.sh</string>
                <key>CFBundleInfoDictionaryVersion</key>
                <string>1.0</string>
                <key>CFBundlePackageType</key>
                <string>APPL</string>
                <key>CFBundleSignature</key>
                <string>????</string>
                <key>CFBundleVersion</key>
                <string>1.0</string>
        </dict>
        </plist>
EOF

echo "CREATE ${DIR}/${APPNAME}.app SUCCESSFULLY";

保存到appmake文件
将appmake文件复制到/usr/local/bin
终端输入:
[Bash shell] 纯文本查看 复制代码
sudo chmod +x /usr/local/bin/appmake

调用:

调用方式:终端输入:
appmake parameter1 parameter2
parameter1为sh文件全路径,parameter2为app名字(缺省为sh文件名)
输出app到sh文件目录下


示例


BurpSuite.sh
[Bash shell] 纯文本查看 复制代码
#!/bin/bash

/Applications/Burp\ Suite\ Professional.app/Contents/PlugIns/jre.bundle/Contents/Home/bin/java -Dfile.encoding=utf-8 -noverify -javaagent:/Applications/Burp\ Suite\ Professional.app/Contents/java/app/burp-loader-x-Ai.jar -Xmx2048m -jar /Applications/Burp\ Suite\ Professional.app/Contents/java/app/burpsuite_pro.jar


终端:
[Bash shell] 纯文本查看 复制代码
appmake /Users/apple/Desktop/BurpSuite.sh BurpSuite

输出:
[Bash shell] 纯文本查看 复制代码
CREATE /Users/apple/Desktop/BurpSuite.app SUCCESSFULLY!

app

app

双击可以运行!
(app图标可以自行设置)
意外收获:原先需要终端持续加载的软件,生成app后居然可以直接打开,目前还不明白原理,欢迎大家测试!

总结


因为没有接触过Xcode、Shell和AppleScript开发,这次探索学到了相当多的知识,脚本完成后再看macOS应用程序的结构,有恍然大悟之感

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
poojiee + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Takitooru + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Takitooru 发表于 2021-8-3 17:14
感谢分享,非常有用的资料,看来可以封装网页一个桌面app
 楼主| jjjzw 发表于 2021-8-3 17:43
Takitooru 发表于 2021-8-3 17:14
感谢分享,非常有用的资料,看来可以封装网页一个桌面app

妙啊!iOS提供了网页url的封装,Mac好像没有。
[Bash shell] 纯文本查看 复制代码
#!/bin/bash
open -a "/Applications/Safari.app" https://www.52pojie.cn/forum.php

封装成果:

52PoJie

52PoJie

小木木XX 发表于 2022-10-18 16:32
小木木XX 发表于 2022-11-24 10:39
小白过来学习了
头像被屏蔽
tangguo520 发表于 2022-11-24 16:58
提示: 作者被禁止或删除 内容自动屏蔽
小木木XX 发表于 2022-12-4 09:36
楼主,如何把.sh文件封装成mac系统双击可执行文件(和win下的.bat那种)双击直接调用的终端窗口
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表