forked from dail8859/NotepadNext
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·116 lines (92 loc) · 3.86 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·116 lines (92 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
# NotepadNext 修复安装脚本
# 解决 "code has no resources but signature indicates they must be present" 问题
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
APP_NAME="NotepadNext.app"
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 查找源应用(支持两种路径)
if [ -d "$SCRIPT_DIR/$APP_NAME" ]; then
SOURCE_APP="$SCRIPT_DIR/$APP_NAME"
elif [ -d "$SCRIPT_DIR/build-macos/NotepadNext/$APP_NAME" ]; then
SOURCE_APP="$SCRIPT_DIR/build-macos/NotepadNext/$APP_NAME"
else
SOURCE_APP=""
fi
DEST_PATH="/Applications/$APP_NAME"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo -e "${BLUE} NotepadNext 修复安装脚本${NC}"
echo -e "${BLUE}═══════════════════════════════════════${NC}"
echo ""
# 检查源应用
if [ ! -d "$SOURCE_APP" ]; then
echo -e "${RED}✗ 错误: 找不到源应用${NC}"
exit 1
fi
echo -e "${GREEN}✓${NC} 找到源应用"
# 停止所有进程
echo -e "${BLUE}→${NC} 停止运行中的进程..."
killall -9 NotepadNext 2>/dev/null || true
sleep 1
# 清理 IPC 资源
echo -e "${BLUE}→${NC} 清理 IPC 资源..."
ipcs -m | grep $(id -u) | awk '{print $2}' | xargs -I {} ipcrm -m {} 2>/dev/null || true
ipcs -s | grep $(id -u) | awk '{print $2}' | xargs -I {} ipcrm -s {} 2>/dev/null || true
# 清理锁文件(保留用户配置)
echo -e "${BLUE}→${NC} 清理锁文件..."
rm -f ~/.config/NotepadNext/.lock 2>/dev/null || true
rm -f ~/.config/NotepadNext/SingleApplication* 2>/dev/null || true
# 删除旧版本
if [ -d "$DEST_PATH" ]; then
echo -e "${BLUE}→${NC} 删除旧版本..."
sudo rm -rf "$DEST_PATH"
fi
# 使用 cp 而不是 sudo cp 来避免权限问题
echo -e "${BLUE}→${NC} 安装应用..."
sudo cp -R "$SOURCE_APP" "$DEST_PATH"
# 复制翻译文件
echo -e "${BLUE}→${NC} 更新中文翻译..."
if [ -f "$SCRIPT_DIR/i18n/NotepadNext_zh_CN.qm" ]; then
sudo cp "$SCRIPT_DIR/i18n/NotepadNext_zh_CN.qm" "$DEST_PATH/Contents/Resources/"
echo -e "${GREEN}✓${NC} 中文翻译已更新"
else
echo -e "${RED}⚠${NC} 翻译文件未找到"
fi
# 修复权限
echo -e "${BLUE}→${NC} 修复权限..."
sudo chown -R $(whoami):staff "$DEST_PATH"
# 移除隔离属性(非常重要!)
echo -e "${BLUE}→${NC} 移除隔离属性..."
sudo xattr -cr "$DEST_PATH"
# 完全移除签名
echo -e "${BLUE}→${NC} 移除旧签名..."
find "$DEST_PATH" -name "_CodeSignature" -type d -exec sudo rm -rf {} + 2>/dev/null || true
# 重新签名整个应用包
echo -e "${BLUE}→${NC} 重新签名应用..."
sudo codesign --force --deep --sign - "$DEST_PATH" 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓${NC} 签名成功"
else
echo -e "${RED}⚠${NC} 签名失败,尝试其他方法..."
fi
# 再次移除隔离属性(确保万无一失)
echo -e "${BLUE}→${NC} 再次移除隔离属性..."
sudo xattr -d com.apple.quarantine "$DEST_PATH" 2>/dev/null || true
# 添加到 Gatekeeper 白名单
echo -e "${BLUE}→${NC} 添加到系统白名单..."
sudo spctl --add "$DEST_PATH" 2>/dev/null || true
sudo spctl --enable "$DEST_PATH" 2>/dev/null || true
echo ""
echo -e "${GREEN}═══════════════════════════════════════${NC}"
echo -e "${GREEN} 安装完成!${NC}"
echo -e "${GREEN}═══════════════════════════════════════${NC}"
echo ""
echo -e "${BLUE}测试启动:${NC}"
echo -e " open -a NotepadNext"
echo ""
# 自动测试
open -a NotepadNext && sleep 2 && ps aux | grep "[N]otepadNext" > /dev/null && echo -e "${GREEN}✓ 应用运行成功!${NC}" || echo -e "${RED}⚠ 请手动测试启动${NC}"