MacApp项目开发总结

MacApp项目开发总结

2023年7月26日发(作者:)

MacApp项⽬开发总结Mac App项⽬开发总结Launch Daemon守护进程详细的Launch Daemon使⽤⽂档见官⽅⽂档,这⾥只简单介绍⼀下。1、Launch Daemon启动的程序拥有root⽤户的权限2、Launch Daemon依赖的配置⽂件plist需要存放在/Library/LaunchDaemons/⽬录下,开机会⾃启动配置的程序3、可以在命令⾏通过sudo launchctl [cmd]来操作守护进程// 详细见launchctl --help// 如:停⽌守护进程(label是plist中配置的Label值)sudo launchctl stop label启动守护进程sudo launchctl start label4、守护进程任务Demo检查指定进程是否启动,没有启动就启动#!/bin/shresult=`ps -ef | grep ServiceProcess | grep -v grep | wc -l`#echo "result=$result"if [ $result -eq 0 ]then current=`date "+%Y-%m-%d %H:%M:%S"` echo "server not start" #启动服务 sudo launchctl start serviceLabel echo "server start end time = $current"fi守护进程plist配置 Label serviceLabel ProgramArguments / StandardOutPath /var/log/ StandardErrorPath /var/log/ StartInterval 30StartInterval表⽰定时任务:每30秒执⾏⼀次StandardErrorPath表⽰程序异常打印的⽇志ProgramArguments表⽰检查脚本的路径Mac程序中与Shell脚本交互1、执⾏脚本获取脚本返回值check_中的内容#!/bin/shresult=`ps -ef | grep Service | grep -v grep | wc -l`echo $resultSwift:guard let path = (forResource: "check_", ofType: nil) else { return}let script = "do shell script "/bin/bash "(path)"" "let appleScript = NSAppleScript(source: script)if let result = appleScript?.executeAndReturnError(nil) { print("shell脚本返回 result = (result)")}如果脚本中需要root权限,需要加上如下代码,只不过这个时候会提⽰输⼊电脑密码才能执⾏let script = "do shell script "/bin/bash "(path)"" with administrator privileges"安装包的制作(dmg和pkg)dmg和pkg的区别:dmg往往只包含⼀个已经签名的APP⽂件、应⽤程序的替⾝、提⽰将APP拖拽到替⾝的背景图。pkg安装包⼀般包括⼀个已经签名的APP⽂件、其他配置⽂件或者动态库、安装完成前后者结束后需要执⾏的脚本。因此,安装包⽂件⽐较多的时候,或者需要⽤脚本处理⼀些事情的时候选择pkg⽐较好。1、dmg安装包制作a、已经签名的appb、通过磁盘⼯具创建磁盘镜像打开磁盘⼯具->创建空⽩磁盘,⼤⼩根据APP的⼤⼩设置,然后保存c、打开磁盘镜像,将app、应⽤程序的替⾝、背景图⽚拖动到磁盘中合适的位置d、右键点击打开的磁盘->查看显⽰选项->设置背景图e、打开磁盘⼯具->转换->选取磁盘镜像->⽣成安装包即可2、pgk安装包的制作pkg这⾥采⽤Packages软件来制作。安装包的公证如果开发的Mac APP不⾛App Store分发,可以通过Developer ID来签名分发应⽤。从macOS 10.14.5开始如果没有经过公证的应⽤,在Mac上⾯安装需要开启”允许任何来源“的应⽤安装。1、⼀种⽅式是通过Xcode上传APP公证,然后下载分发2、另⼀种就是⾃定义公证流程,⽐如公证pkg安装包等⾃定义公证流程常遇到的问题:1、The binary is not signed with a valid Developer ID 包⾥⾯的⼆进制都需要被Developer ID签名2、The signature does not include a secure timestamp.签名没有时间戳解决⽅式:a、命令⾏签名 codesign 加上 --timestamp参数codesign -fs CD23E2617B64DF3B299376F6AFA86A --timestamp ./Serviceb、Xcode签名OTHER_CODE_SIGN_FLAGS3、The executable requests the -task-allow entitlement.将release的值设置为 CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO4、The executable does not have the hardened runtime enabled.在Capability添加hardened runtime,选择合适的权限即可pkg签名:3C08C00A7B33A10645E6DDC2299A7D54C是Developer ID Installer证书productsign --sign 3C08C00A7B33A10645E6DDC2299A7D54C ./ ./Mac_利⽤脚本上传安装包公证#!/bin/sh#pkg签名echo "pkg开始签名"productsign --sign 3C08C00A7B33A10645E6DDC2299A7D54C ./ ./Mac_o "pkg签名结束"NOTRAIZED_FILE="./Mac_"USERNAME="appleid" // 开发者账号PASSWORD="xznq-jivl-glrx" // 在苹果官⽅⽣成专⽤密码BUNDLE_ID="" // ⾃定义PROVIDER="K8MXV5Q"BUIDL_LOG=""UUID=""echo "###### start notarized ${NOTRAIZED_FILE} ... ######"xcrun altool --notarize-app --primary-bundle-id "${BUNDLE_ID}" --username "${USERNAME}" --password "${PASSWORD}" --asc-provider "${PROVIDER}" --file "${NOTRAIZED_FILE}" &> "${BUIDL_LOG}"# get success uuid# RequestUUID =UUID=`cat ${BUIDL_LOG} | grep -Eo 'RequestUUID = [[:alnum:]]{8}-([[:alnum:]]{4}-){3}[[:alnum:]]{12}' | grep -Eo '[[:alnum:]]{8}-([[:alnum:]]{4}-){3}[[:alnum:]]{12}' | sed -n "1p"`# if file unable upload or upload failed exitif [[ "$UUID" == "" ]]; then echo "###### No success no uploaded, unknown error ######" cat ${BUIDL_LOG} | awk 'END {print}' exitfiecho "###### notarization UUID is $UUID ######"sleep 120#search notarized resultwhile true; do echo "###### checking ######" xcrun altool --notarization-info "${UUID}" -u "${USERNAME}" -p "${PASSWORD}" &> "${BUIDL_LOG}" r=`cat ${BUIDL_LOG}` t=`echo "$r" | grep "success"` f=`echo "$r" | grep "invalid"` if [[ "$t" != "" ]]; then echo "###### notarization done! ######" xcrun stapler staple "${NOTRAIZED_FILE}" echo "###### stapler done! ######" break fi if [[ "$f" != "" ]]; then echo "###### Failed : $r ######" exit fi echo "###### please waiting, sleep 1min then ######" sleep 60doneexit

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690379360a340667.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信