Compare commits
1060 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15ad0c509e | ||
|
|
0e0b1436b2 | ||
|
|
528d32cc9d | ||
|
|
8e15ed6d6e | ||
|
|
796b5bcd9e | ||
|
|
a37571a8a5 | ||
|
|
9796ecf75e | ||
|
|
cade003b31 | ||
|
|
2d8c9c5beb | ||
|
|
0a138ee435 | ||
|
|
6b414526ac | ||
|
|
a67a6d6c67 | ||
|
|
da887e3722 | ||
|
|
e65b8386ab | ||
|
|
0d7edc8e09 | ||
|
|
32080fdcc3 | ||
|
|
c2d9d01a24 | ||
|
|
cdb6603ed6 | ||
|
|
dbf7444009 | ||
|
|
c46133b0b5 | ||
|
|
dde558a951 | ||
|
|
9bdce62f59 | ||
|
|
098a4f9661 | ||
|
|
d9f23b556c | ||
|
|
0f63ce2fde | ||
|
|
adc58b417b | ||
|
|
b1bb01af69 | ||
|
|
2751ca69de | ||
|
|
e9744fffd6 | ||
|
|
e0e731b13a | ||
|
|
bb34bbb6a1 | ||
|
|
c68afc2f8e | ||
|
|
55ed78f5b4 | ||
|
|
c065aae29f | ||
|
|
8333c3d8ec | ||
|
|
b8b591a8ed | ||
|
|
4542287613 | ||
|
|
597b167285 | ||
|
|
7e5f171210 | ||
|
|
861898272b | ||
|
|
16ab3367f8 | ||
|
|
9d43d66f5d | ||
|
|
753cd6cf3f | ||
|
|
192dfb79ae | ||
|
|
d7f3d09c14 | ||
|
|
41a5731546 | ||
|
|
2e513b98ca | ||
|
|
5c1326881a | ||
|
|
1d6631f24d | ||
|
|
61872a8b94 | ||
|
|
024559885d | ||
|
|
3e0a2a2198 | ||
|
|
86be4acedb | ||
|
|
ce08129d4b | ||
|
|
56c9fd52d5 | ||
|
|
429c213f79 | ||
|
|
2ce1f1c7f9 | ||
|
|
366bb6b6c2 | ||
|
|
3f7617c7c5 | ||
|
|
bd1e8b48b5 | ||
|
|
faba9e3200 | ||
|
|
4bda620f1e | ||
|
|
3a459dbdc3 | ||
|
|
9cc08a25db | ||
|
|
1594db1624 | ||
|
|
5f54bdff54 | ||
|
|
1e0eb42c47 | ||
|
|
9e3087003c | ||
|
|
7eb1ea2055 | ||
|
|
b9c5aaa8dc | ||
|
|
b0eb0fe5d9 | ||
|
|
28ef0bb0d9 | ||
|
|
67006be28a | ||
|
|
37ff4f70e7 | ||
|
|
bcca5f8e2a | ||
|
|
a1dc492cc9 | ||
|
|
f394bee0f5 | ||
|
|
a41001130f | ||
|
|
e58dff05f2 | ||
|
|
9970e6806c | ||
|
|
1c39396ae2 | ||
|
|
431543057a | ||
|
|
d67e2e3dee | ||
|
|
6a4f2a9f02 | ||
|
|
0b68741959 | ||
|
|
9ec68a9db6 | ||
|
|
4246f91289 | ||
|
|
38657fb1c6 | ||
|
|
f6408a1054 | ||
|
|
aabb0b24ba | ||
|
|
2b39428127 | ||
|
|
be53b0a034 | ||
|
|
2cb3642c29 | ||
|
|
8feed781b2 | ||
|
|
be361d27e6 | ||
|
|
5f838259ad | ||
|
|
f3e52a1335 | ||
|
|
622c56b430 | ||
|
|
287bca39e8 | ||
|
|
b1325b77da | ||
|
|
81f35aff57 | ||
|
|
143dba4a17 | ||
|
|
da3d701075 | ||
|
|
c70238bd5d | ||
|
|
8eebf7e1e1 | ||
|
|
85cf440996 | ||
|
|
db2768a2bf | ||
|
|
48c74a1d75 | ||
|
|
73aa594ab6 | ||
|
|
42478c726b | ||
|
|
00ea5a7843 | ||
|
|
7f0a96126b | ||
|
|
c6f6fe4b43 | ||
|
|
c3dcb35b33 | ||
|
|
eefe49b837 | ||
|
|
bf3f4481dc | ||
|
|
ce6f65de1f | ||
|
|
045cc3726e | ||
|
|
60d392f969 | ||
|
|
e992fbdd14 | ||
|
|
3d40c94787 | ||
|
|
9794cc5fb1 | ||
|
|
8ae451f37f | ||
|
|
3c309d71b9 | ||
|
|
dbdddd063f | ||
|
|
0e1421f7fc | ||
|
|
3a3bba4c65 | ||
|
|
1f000d893f | ||
|
|
87469b71d0 | ||
|
|
8d838a3148 | ||
|
|
c1f5be775d | ||
|
|
7539d175b5 | ||
|
|
5a1fa12e5b | ||
|
|
6aed21aae2 | ||
|
|
c0ae23367e | ||
|
|
4bbfe465fa | ||
|
|
2fb243cc00 | ||
|
|
b74001a6e5 | ||
|
|
4e4157c125 | ||
|
|
9ef569e949 | ||
|
|
4b7c399ce6 | ||
|
|
fcf24cef88 | ||
|
|
1d37c5a4ee | ||
|
|
27d95a9aae | ||
|
|
8cae25b95a | ||
|
|
fb0ea6bb08 | ||
|
|
303a908248 | ||
|
|
3585053633 | ||
|
|
a329e80082 | ||
|
|
8332b714b5 | ||
|
|
4add945fa0 | ||
|
|
807d394bdb | ||
|
|
0ba78bae68 | ||
|
|
d73b3dcc69 | ||
|
|
d9e91bd17e | ||
|
|
8a9db4c2a5 | ||
|
|
fccde7214b | ||
|
|
24cc303530 | ||
|
|
2753f88bfa | ||
|
|
4056224476 | ||
|
|
5b55d17e42 | ||
|
|
669cc0ac5f | ||
|
|
9a3181d465 | ||
|
|
728fef9256 | ||
|
|
b06feb9dbe | ||
|
|
bd51332a17 | ||
|
|
a6503bcd97 | ||
|
|
f931c3b6c2 | ||
|
|
c8aa13664d | ||
|
|
f32a813a0c | ||
|
|
2696879109 | ||
|
|
df28ea288a | ||
|
|
fc5b250d41 | ||
|
|
b349459da6 | ||
|
|
132f12c885 | ||
|
|
bbdfb8158f | ||
|
|
be7493f74a | ||
|
|
fbe216164a | ||
|
|
1cbee930cb | ||
|
|
f77a45a587 | ||
|
|
ef32e07ac6 | ||
|
|
e4f1f6b288 | ||
|
|
ba0a6a59e5 | ||
|
|
1ff1934595 | ||
|
|
61eb938350 | ||
|
|
5a57ee1cc9 | ||
|
|
258b0309ab | ||
|
|
53dd5d3477 | ||
|
|
c4cda81df6 | ||
|
|
35b365c8ca | ||
|
|
1653fec580 | ||
|
|
d1e721d8d7 | ||
|
|
e453bd1b51 | ||
|
|
1a576c72a2 | ||
|
|
9a55317f86 | ||
|
|
23d7f9f07c | ||
|
|
8c99335b83 | ||
|
|
5fd7ad0b4b | ||
|
|
b065da6dbf | ||
|
|
90092a296d | ||
|
|
57356bcceb | ||
|
|
d726851d9c | ||
|
|
cdd81c5466 | ||
|
|
7897cd14b6 | ||
|
|
628fe4f8fc | ||
|
|
260fcf4c93 | ||
|
|
a074baa2e9 | ||
|
|
e81c138d2e | ||
|
|
aa4fd137d1 | ||
|
|
960090fd80 | ||
|
|
8203cbc756 | ||
|
|
fb88795923 | ||
|
|
7e6da1d056 | ||
|
|
a7837f1ae8 | ||
|
|
4544c99fde | ||
|
|
1f2409043d | ||
|
|
580fb83b4d | ||
|
|
de3875279a | ||
|
|
cdfefe1612 | ||
|
|
6f7f309a4d | ||
|
|
86a7e306f6 | ||
|
|
8d88fbbfa4 | ||
|
|
414d114b85 | ||
|
|
0749d14e1c | ||
|
|
ae423888d7 | ||
|
|
4583a743be | ||
|
|
537853418d | ||
|
|
6603df4cce | ||
|
|
21e144ee5f | ||
|
|
4f44737f12 | ||
|
|
50e7f1d3ad | ||
|
|
18157fe5aa | ||
|
|
3b551d565a | ||
|
|
b7c4ea2b89 | ||
|
|
66f0009c65 | ||
|
|
49da508bde | ||
|
|
76516394fd | ||
|
|
f46f4cf857 | ||
|
|
4f104de405 | ||
|
|
4f2f9a8763 | ||
|
|
ceeef7c1a5 | ||
|
|
9cadfec802 | ||
|
|
dbae3383d0 | ||
|
|
99daa4c2b1 | ||
|
|
18ec8ca665 | ||
|
|
5f675ab9de | ||
|
|
ed002ce988 | ||
|
|
9f24c8738a | ||
|
|
5551780fcb | ||
|
|
820481a288 | ||
|
|
a32e148ec0 | ||
|
|
e7c9f4e90c | ||
|
|
692c0de9f2 | ||
|
|
dbae4db28c | ||
|
|
ded1e8c2c7 | ||
|
|
0f83e77f1a | ||
|
|
1fc1595ffb | ||
|
|
1c147819f7 | ||
|
|
4aaf658c8f | ||
|
|
2fb193692b | ||
|
|
7f6a2e393c | ||
|
|
0a48986ddb | ||
|
|
edd9814f12 | ||
|
|
f32f94e588 | ||
|
|
5fb4bbf7f4 | ||
|
|
7d8d9324e0 | ||
|
|
f717bdceae | ||
|
|
d015f8d1e4 | ||
|
|
462d6f633a | ||
|
|
b2c01da5b2 | ||
|
|
fc650bfd97 | ||
|
|
ffeec342a9 | ||
|
|
ea12d44d68 | ||
|
|
09c3b8e3da | ||
|
|
697dbec6a1 | ||
|
|
991c059f30 | ||
|
|
40484a42dd | ||
|
|
832232dd37 | ||
|
|
f9ecafb661 | ||
|
|
42c6d6b042 | ||
|
|
1d9fbec9ef | ||
|
|
9a2fca8d18 | ||
|
|
475b9e793f | ||
|
|
73ce7e5bda | ||
|
|
3bffad8001 | ||
|
|
aa40e9328a | ||
|
|
ec103c1d2e | ||
|
|
dd88879dc0 | ||
|
|
a8ecd1c153 | ||
|
|
2dd2569931 | ||
|
|
86e88bf70c | ||
|
|
6daa038705 | ||
|
|
0e6576ac3d | ||
|
|
074d56eed3 | ||
|
|
e086d0aec1 | ||
|
|
61524c764c | ||
|
|
8f0e8d6928 | ||
|
|
b62eb7e684 | ||
|
|
18d66c66bb | ||
|
|
b27e349952 | ||
|
|
fdfc86e0d6 | ||
|
|
3d8d97f400 | ||
|
|
32e26a10c4 | ||
|
|
d613581faa | ||
|
|
c645f57572 | ||
|
|
8fb2ee4b83 | ||
|
|
1e650637eb | ||
|
|
9be685e358 | ||
|
|
3dc0c46986 | ||
|
|
9428040f64 | ||
|
|
ec9ecbc7a9 | ||
|
|
303d3de6bd | ||
|
|
e8efa89899 | ||
|
|
b0def277ea | ||
|
|
acbeef070f | ||
|
|
e3eb90b7fb | ||
|
|
c5dae2c61f | ||
|
|
fdddb8378c | ||
|
|
8aed4e02a6 | ||
|
|
2a6c3efa99 | ||
|
|
b3fe52b02b | ||
|
|
41be3ffb55 | ||
|
|
9db11c3a8c | ||
|
|
ea96c2c4ad | ||
|
|
0202f4e1fb | ||
|
|
796c2207a0 | ||
|
|
1469601570 | ||
|
|
7d686a29cf | ||
|
|
b6346137f3 | ||
|
|
e2dabfcc16 | ||
|
|
0ef817566e | ||
|
|
af44dcef8e | ||
|
|
dd96889f66 | ||
|
|
811344261e | ||
|
|
e8233c3691 | ||
|
|
952ac0de8c | ||
|
|
984eb67596 | ||
|
|
45651a9aec | ||
|
|
e91c76e88e | ||
|
|
ef68b43fc3 | ||
|
|
d6fbb2cf19 | ||
|
|
fde7d6f7ec | ||
|
|
bac61f2dfa | ||
|
|
3906b80a68 | ||
|
|
f7bcb26b10 | ||
|
|
23146d731a | ||
|
|
7f7acc4c9a | ||
|
|
b494107d88 | ||
|
|
abb18a5ad2 | ||
|
|
84e020f7ea | ||
|
|
065b73daab | ||
|
|
c456274446 | ||
|
|
2fe8f4f4c8 | ||
|
|
4e8805ddd7 | ||
|
|
ddb71e6776 | ||
|
|
a06b1f578e | ||
|
|
e53ced5b8e | ||
|
|
59b5ccf07e | ||
|
|
eddc9e6ffd | ||
|
|
19c35f05e5 | ||
|
|
9adbb5ae09 | ||
|
|
cf32b7a989 | ||
|
|
c19c6aa575 | ||
|
|
5e2278860d | ||
|
|
f97096945b | ||
|
|
6caabf9726 | ||
|
|
83fec2952e | ||
|
|
10da04ca3e | ||
|
|
d464c80305 | ||
|
|
463bed4e06 | ||
|
|
d02d89b9c0 | ||
|
|
ae8d6923d7 | ||
|
|
b7e76c2a4d | ||
|
|
dd425d2c1e | ||
|
|
31e4d8d3f1 | ||
|
|
bbc8902270 | ||
|
|
520c922429 | ||
|
|
9c2da4e4fb | ||
|
|
4c4b202bcc | ||
|
|
8509746a49 | ||
|
|
59beb64d17 | ||
|
|
1713bfe6c3 | ||
|
|
28f7f603b7 | ||
|
|
5a0c7679f7 | ||
|
|
e494906f22 | ||
|
|
cdb40d8201 | ||
|
|
b42eb6e395 | ||
|
|
20bb0cd6d8 | ||
|
|
c6688ea922 | ||
|
|
0e490e5ae9 | ||
|
|
e58a671136 | ||
|
|
5d142fd19f | ||
|
|
f55598dac8 | ||
|
|
321cc8dd68 | ||
|
|
9070f5af8d | ||
|
|
a8c080042a | ||
|
|
5788e067b3 | ||
|
|
90d7e9715d | ||
|
|
f8a3d5716c | ||
|
|
82084c84e3 | ||
|
|
f29c629165 | ||
|
|
54b3e17d93 | ||
|
|
2bc843dd2f | ||
|
|
55eeec790f | ||
|
|
8db6c5607d | ||
|
|
2df8dc9caf | ||
|
|
99f48b1e87 | ||
|
|
0dfcf03c0c | ||
|
|
b46e55d3f6 | ||
|
|
62fd543623 | ||
|
|
ec46221c30 | ||
|
|
e57247a233 | ||
|
|
6aa0ab2161 | ||
|
|
f1210def89 | ||
|
|
03842d4e77 | ||
|
|
34676702f4 | ||
|
|
352d917a7d | ||
|
|
f1b47f6a78 | ||
|
|
15d58966f6 | ||
|
|
49cb9ccb66 | ||
|
|
6841fa6f0a | ||
|
|
5e77d7dba1 | ||
|
|
fbedb6f0d2 | ||
|
|
974a560cde | ||
|
|
5db862d38b | ||
|
|
139f94aae1 | ||
|
|
432736eb98 | ||
|
|
6e40a80650 | ||
|
|
21e1b73a4e | ||
|
|
d9676afe43 | ||
|
|
525c7c3173 | ||
|
|
51ef3fe719 | ||
|
|
c6f5ceacfd | ||
|
|
55801e80bd | ||
|
|
4196a7b5f2 | ||
|
|
f0d6faab9a | ||
|
|
6b00caf883 | ||
|
|
d98a653082 | ||
|
|
6d026290ac | ||
|
|
39e58b3927 | ||
|
|
8cfc33e704 | ||
|
|
2b1beff6dc | ||
|
|
d23e483542 | ||
|
|
d57a758c73 | ||
|
|
16b2f1ff55 | ||
|
|
ba0a676ca0 | ||
|
|
2ff132cb04 | ||
|
|
613748488c | ||
|
|
f23c9268f9 | ||
|
|
7160f34a85 | ||
|
|
6767f58047 | ||
|
|
1e781dccb3 | ||
|
|
7e7a5d0f35 | ||
|
|
f91c817fce | ||
|
|
173f77cc31 | ||
|
|
94f870ef5b | ||
|
|
1641e2522b | ||
|
|
60f403d4b4 | ||
|
|
a8a6e609f4 | ||
|
|
de7d024c8f | ||
|
|
253b8b40a0 | ||
|
|
331d5c7b49 | ||
|
|
edbfa951c8 | ||
|
|
3f828d0d69 | ||
|
|
e6a33ed26b | ||
|
|
59e9ddfe3e | ||
|
|
c27998a881 | ||
|
|
faa6b1e770 | ||
|
|
c8b02a8e28 | ||
|
|
03713c3f7b | ||
|
|
64cab85704 | ||
|
|
957dd4b9ff | ||
|
|
d83f8ee381 | ||
|
|
14e5772b44 | ||
|
|
23ee732078 | ||
|
|
457615a161 | ||
|
|
2ec63ce006 | ||
|
|
7c23220416 | ||
|
|
1aee2e5dfa | ||
|
|
760db35d15 | ||
|
|
af57596559 | ||
|
|
51954d3b6a | ||
|
|
9e485a5997 | ||
|
|
379eb56eb5 | ||
|
|
a483e713ae | ||
|
|
0877d4b4be | ||
|
|
b5a876ffd7 | ||
|
|
5924ab507c | ||
|
|
f4a8cbbea9 | ||
|
|
86ce62a7d6 | ||
|
|
8aace2d2c9 | ||
|
|
815eb8f270 | ||
|
|
c7471fc64b | ||
|
|
f968a493b9 | ||
|
|
5e61f0c61f | ||
|
|
38188a5ccb | ||
|
|
ba88b5be82 | ||
|
|
a41bbb8267 | ||
|
|
2c428aa3dd | ||
|
|
4429b5cb4b | ||
|
|
526594a90d | ||
|
|
04a2e55d24 | ||
|
|
7aff1794c6 | ||
|
|
e8f8f1bd93 | ||
|
|
cba33c1e82 | ||
|
|
a26120a376 | ||
|
|
9982d43d5a | ||
|
|
b72ff16f55 | ||
|
|
54c56e2988 | ||
|
|
8718c620d3 | ||
|
|
8a6a9ec054 | ||
|
|
e56beb5f4e | ||
|
|
9038aaf906 | ||
|
|
8a287e7cc2 | ||
|
|
8f7606aaf2 | ||
|
|
1319a23c77 | ||
|
|
5774f0c402 | ||
|
|
ce70d87555 | ||
|
|
859b002240 | ||
|
|
00d29e8422 | ||
|
|
6fcdd5fa99 | ||
|
|
4f1cb2d753 | ||
|
|
c9ace128a1 | ||
|
|
e6149046b3 | ||
|
|
82eec8e343 | ||
|
|
c4063840e9 | ||
|
|
aa7be2163f | ||
|
|
67b00f34be | ||
|
|
be4ef6a7f2 | ||
|
|
a24570de05 | ||
|
|
fb85c42c52 | ||
|
|
c6bef2d8aa | ||
|
|
7dc80475c3 | ||
|
|
404e855443 | ||
|
|
5683fedd25 | ||
|
|
3bf92c3587 | ||
|
|
ce0928ba38 | ||
|
|
25f5ea2457 | ||
|
|
0ba93a8a2b | ||
|
|
3e0c329e53 | ||
|
|
2fc21e6f07 | ||
|
|
8db6085ed1 | ||
|
|
ca4fd2286f | ||
|
|
df6ca71124 | ||
|
|
3fb624fc7d | ||
|
|
89e36d762b | ||
|
|
f24a7f4229 | ||
|
|
55b3641965 | ||
|
|
8baca06246 | ||
|
|
f7b160f449 | ||
|
|
fc65423ee2 | ||
|
|
8c25110568 | ||
|
|
dad8d1224a | ||
|
|
ed78b5632c | ||
|
|
6bb274638e | ||
|
|
bb78f59b9d | ||
|
|
0c960438f2 | ||
|
|
c1849c0d28 | ||
|
|
e62335cae5 | ||
|
|
b4644f4b80 | ||
|
|
1d22ea51b4 | ||
|
|
241fe052aa | ||
|
|
51eb22bc94 | ||
|
|
084ee663b2 | ||
|
|
1fb46d0d76 | ||
|
|
1faa8055ab | ||
|
|
b50f376990 | ||
|
|
13ffc64ce6 | ||
|
|
9676c2c08a | ||
|
|
9317e11009 | ||
|
|
211e8fbb71 | ||
|
|
f2bfb7c479 | ||
|
|
35722875ee | ||
|
|
86a9789b18 | ||
|
|
18c49d0902 | ||
|
|
f7ec0ddf21 | ||
|
|
c2d26b4903 | ||
|
|
cf7a553f0b | ||
|
|
434dedb815 | ||
|
|
214e31e8e3 | ||
|
|
ed63f12f2b | ||
|
|
91417bf75d | ||
|
|
be62a3f7db | ||
|
|
f5b467c4fb | ||
|
|
fd17caf03d | ||
|
|
37862961df | ||
|
|
c05238875f | ||
|
|
60f4182184 | ||
|
|
526c009866 | ||
|
|
55b76aff9a | ||
|
|
e6f44a902a | ||
|
|
26e69d0084 | ||
|
|
9cfe1a493c | ||
|
|
b4e0c79d13 | ||
|
|
e2440a075e | ||
|
|
59c5393bc4 | ||
|
|
685491d0ba | ||
|
|
0f64b8b2d9 | ||
|
|
e800612bcf | ||
|
|
ae1d73eac1 | ||
|
|
fab6daae5e | ||
|
|
cc68e098eb | ||
|
|
b95bd4e357 | ||
|
|
36f69c4f21 | ||
|
|
829f1f6bc1 | ||
|
|
d73d62f68c | ||
|
|
5b6b8d6e1a | ||
|
|
01b0bc4c67 | ||
|
|
5537340c87 | ||
|
|
eda96d0f93 | ||
|
|
65a11b30d7 | ||
|
|
5f5d5daebf | ||
|
|
226a59e9c1 | ||
|
|
840f47d861 | ||
|
|
c5adf1eeea | ||
|
|
70b4381003 | ||
|
|
2a315b7a57 | ||
|
|
e8b4e3dfdf | ||
|
|
c5dd7ec6c9 | ||
|
|
3aed0438fc | ||
|
|
58314caed4 | ||
|
|
bd8c6b4d9f | ||
|
|
7134e30640 | ||
|
|
e8ee2a2657 | ||
|
|
c9a14e242d | ||
|
|
69f4bbc7a6 | ||
|
|
5ecd453c75 | ||
|
|
d7eebbe171 | ||
|
|
1038be303b | ||
|
|
d12b39bd98 | ||
|
|
d6161481ef | ||
|
|
2455cb1233 | ||
|
|
d2312e3cce | ||
|
|
3ff6f68236 | ||
|
|
8b0625eb41 | ||
|
|
97a86fcd92 | ||
|
|
9631cc48bd | ||
|
|
84a3341788 | ||
|
|
d547ecdcf0 | ||
|
|
e0fd78c7af | ||
|
|
87f412b469 | ||
|
|
12395acc12 | ||
|
|
64854ef567 | ||
|
|
43be00e9e7 | ||
|
|
aa1739c1d6 | ||
|
|
4cb7ce3f12 | ||
|
|
5df3cca616 | ||
|
|
6003d6c457 | ||
|
|
20d04d307d | ||
|
|
24a1e35f54 | ||
|
|
ef4983d907 | ||
|
|
ec56e8a8d2 | ||
|
|
423bf8f20c | ||
|
|
55e6aeaf0a | ||
|
|
509137f519 | ||
|
|
169ea95dc4 | ||
|
|
e21efa975c | ||
|
|
b9bd01750c | ||
|
|
7691184ca2 | ||
|
|
2bba8f474a | ||
|
|
a5bb29142f | ||
|
|
74857b1d16 | ||
|
|
c19cbd9f41 | ||
|
|
b6630b685a | ||
|
|
b01adb9c10 | ||
|
|
44c2f9cbd4 | ||
|
|
e0d16b2d28 | ||
|
|
4f9ce33912 | ||
|
|
9b3bf07494 | ||
|
|
4982edef33 | ||
|
|
da98b5b37f | ||
|
|
538c5daf70 | ||
|
|
549bf1686b | ||
|
|
f3c3c83140 | ||
|
|
d0ef81946c | ||
|
|
bf1d61879a | ||
|
|
e3fa2e857f | ||
|
|
52d43eb72d | ||
|
|
da412e9084 | ||
|
|
df8cf69513 | ||
|
|
de94fed243 | ||
|
|
2647a3267d | ||
|
|
645c089270 | ||
|
|
d7540fdd5b | ||
|
|
41ef1cefd8 | ||
|
|
4e4ebe25e7 | ||
|
|
d60dd4c9df | ||
|
|
8a4c1b93ac | ||
|
|
9a4883771a | ||
|
|
38bea6a666 | ||
|
|
128c922851 | ||
|
|
78545422c0 | ||
|
|
c476f8e937 | ||
|
|
62cb8edd88 | ||
|
|
2905f88c91 | ||
|
|
090167efb2 | ||
|
|
5f3437c88e | ||
|
|
8884897dff | ||
|
|
138214fd8c | ||
|
|
f973817819 | ||
|
|
c3e0765aae | ||
|
|
3a50a602e0 | ||
|
|
8487eab010 | ||
|
|
15a4217fb6 | ||
|
|
b5b9b3ffbe | ||
|
|
8ac64ff9c0 | ||
|
|
e754a7d06f | ||
|
|
b3f6607768 | ||
|
|
b85256d970 | ||
|
|
b92daff30e | ||
|
|
abdac48f83 | ||
|
|
c9fae32eb6 | ||
|
|
a762d7efe8 | ||
|
|
c044e8acc9 | ||
|
|
f2cc423c31 | ||
|
|
218507b8a7 | ||
|
|
e29895830c | ||
|
|
249c2ed98e | ||
|
|
e5a260b74b | ||
|
|
5e45ea92bc | ||
|
|
6020eae937 | ||
|
|
0dbffc5a3e | ||
|
|
aa994a97aa | ||
|
|
233ded0924 | ||
|
|
5d4a9b7ec7 | ||
|
|
dccc39633b | ||
|
|
985e053e90 | ||
|
|
9a483181a1 | ||
|
|
d762b37851 | ||
|
|
e531d30c3c | ||
|
|
ca8e1a7bf0 | ||
|
|
31a29e0b3e | ||
|
|
1126a49dc5 | ||
|
|
40160b644b | ||
|
|
0fce7adad1 | ||
|
|
8976496e52 | ||
|
|
077b9f67b2 | ||
|
|
8f8778f0f6 | ||
|
|
adcceb0c10 | ||
|
|
4d970cd6f2 | ||
|
|
d4a64b8f1a | ||
|
|
3f2f1e89c9 | ||
|
|
54fcbde01e | ||
|
|
ed00afbc43 | ||
|
|
7ef4d03d85 | ||
|
|
09838449a0 | ||
|
|
b5db385cd4 | ||
|
|
c51f283125 | ||
|
|
cada66a6b5 | ||
|
|
1ef98e0a4b | ||
|
|
4b3f7b837e | ||
|
|
17443b4fbf | ||
|
|
557f0a1bd9 | ||
|
|
77bb25b3a5 | ||
|
|
6a48038696 | ||
|
|
e6251da97a | ||
|
|
7239730c44 | ||
|
|
980e102675 | ||
|
|
dd66bca395 | ||
|
|
831495923a | ||
|
|
c9882f84bc | ||
|
|
4110f7a553 | ||
|
|
e99de2360a | ||
|
|
41ce771c33 | ||
|
|
c0f951411a | ||
|
|
47be068aaf | ||
|
|
49f6a62926 | ||
|
|
1cf0e3d363 | ||
|
|
739c488698 | ||
|
|
a6de37adf0 | ||
|
|
7bb00fd695 | ||
|
|
26fdb2ca2c | ||
|
|
af77e7979e | ||
|
|
3c5f5f84d2 | ||
|
|
6ab297423e | ||
|
|
2435ea747c | ||
|
|
d0eac893fe | ||
|
|
c62fefb575 | ||
|
|
87234740bd | ||
|
|
47a1c6a2e5 | ||
|
|
cee8d8e768 | ||
|
|
e133beee36 | ||
|
|
0388eaa6f2 | ||
|
|
984ba65d41 | ||
|
|
a6879ede75 | ||
|
|
bfcabb3a4a | ||
|
|
efdb278691 | ||
|
|
dd1b60c8be | ||
|
|
80e836e3bb | ||
|
|
597a4a6e14 | ||
|
|
ca85d0d4ca | ||
|
|
abea113272 | ||
|
|
48cf833cb8 | ||
|
|
ea3ff5d3b6 | ||
|
|
01d666e2c3 | ||
|
|
d8904bb3c0 | ||
|
|
d725798c60 | ||
|
|
bad9dbaecc | ||
|
|
79f6754c4f | ||
|
|
12a2d5ade1 | ||
|
|
051196993f | ||
|
|
969cc65ae5 | ||
|
|
4a7b6437a0 | ||
|
|
a2cdc0339a | ||
|
|
7d0bbf62bf | ||
|
|
c8b6eec14f | ||
|
|
0427c9ef44 | ||
|
|
663bec68bf | ||
|
|
cf28e8d2b5 | ||
|
|
b1d0d733d9 | ||
|
|
4f0b605786 | ||
|
|
c031917a12 | ||
|
|
d8a79cf67e | ||
|
|
18b6ce8684 | ||
|
|
d875cdf6a5 | ||
|
|
80ea0cd217 | ||
|
|
77da01dfb4 | ||
|
|
a5319bf432 | ||
|
|
3c5d93f79e | ||
|
|
2ca2bc451a | ||
|
|
ab9208da58 | ||
|
|
3132b0dcb7 | ||
|
|
b22c28e07b | ||
|
|
aa81b0ba49 | ||
|
|
ba5dd16201 | ||
|
|
5f30adab73 | ||
|
|
4c9c7965b6 | ||
|
|
1e86681d3c | ||
|
|
79cf5cb86f | ||
|
|
e6a3536e31 | ||
|
|
af733dc08c | ||
|
|
1d564ed653 | ||
|
|
f20c9e3a09 | ||
|
|
422eee04b7 | ||
|
|
1f23ceef7f | ||
|
|
5c402e1820 | ||
|
|
a92cbe94a1 | ||
|
|
89ef9fb904 | ||
|
|
bfe8776a1a | ||
|
|
52e31d0b1d | ||
|
|
5a7308fa2a | ||
|
|
b0617887dd | ||
|
|
5b4464a1f2 | ||
|
|
d4f004c558 | ||
|
|
df5e7525c2 | ||
|
|
b56ec7c679 | ||
|
|
cd9ce32c04 | ||
|
|
a65ceaa376 | ||
|
|
2788dfc78e | ||
|
|
888387dfa2 | ||
|
|
9c41fff3d4 | ||
|
|
3acc4dc9d9 | ||
|
|
99f6d8f060 | ||
|
|
efdcbd24c1 | ||
|
|
fa322d73c5 | ||
|
|
cb6f294d35 | ||
|
|
4ac46d4b54 | ||
|
|
48dd47aed3 | ||
|
|
58b3748034 | ||
|
|
fefd651157 | ||
|
|
2b1d598bf3 | ||
|
|
a863e55a01 | ||
|
|
b297692b77 | ||
|
|
a17b43525a | ||
|
|
fd9cd85254 | ||
|
|
aa196b6c0d | ||
|
|
cb38ee9477 | ||
|
|
6faff5d52a | ||
|
|
cabcdcd381 | ||
|
|
e36e9b35e9 | ||
|
|
566df783c8 | ||
|
|
edbd96a7e9 | ||
|
|
72f7d20ce5 | ||
|
|
39147e95be | ||
|
|
7d1d3dd9f6 | ||
|
|
6146aa48c6 | ||
|
|
266261484f | ||
|
|
231e545ca4 | ||
|
|
f18184bded | ||
|
|
7171de0679 | ||
|
|
d360a8ee8b | ||
|
|
5505737b37 | ||
|
|
11bc64f8e6 | ||
|
|
300726ea96 | ||
|
|
186669b9cd | ||
|
|
b4afa8bc28 | ||
|
|
04441590f0 | ||
|
|
f5d9ecfc25 | ||
|
|
f6f4131b53 | ||
|
|
47458daae2 | ||
|
|
0507654d09 | ||
|
|
0ed1cbde2f | ||
|
|
c80c46288c | ||
|
|
0cd1509a38 | ||
|
|
06b8b08d4b | ||
|
|
6fc895a45b | ||
|
|
98bbddc03d | ||
|
|
46d2a86e2f | ||
|
|
5a6407ab14 | ||
|
|
8b38939759 | ||
|
|
4b6587dc3b | ||
|
|
8adbc3b5d2 | ||
|
|
62e565b8c0 | ||
|
|
749a0be86e | ||
|
|
a1de379c5f | ||
|
|
bf00c013c8 | ||
|
|
8c848f9317 | ||
|
|
fa711c18cc | ||
|
|
2d5ea95ee0 | ||
|
|
0cc8b7b705 | ||
|
|
fecd71ef46 | ||
|
|
451262d50b | ||
|
|
88f895b61e | ||
|
|
28f10824fd | ||
|
|
2f6666edfb | ||
|
|
831fbc3319 | ||
|
|
7417fc4180 | ||
|
|
96fcba8391 | ||
|
|
d576752744 | ||
|
|
034a30a283 | ||
|
|
adcacc478d | ||
|
|
e853be2e84 | ||
|
|
c414c9cde7 | ||
|
|
87f9f39179 | ||
|
|
0a18db3142 | ||
|
|
63ba8d4a16 | ||
|
|
017d59f57d | ||
|
|
0f55b074af | ||
|
|
652e8659e4 | ||
|
|
f7d5b9345f | ||
|
|
54480c3776 | ||
|
|
36c39a7e71 | ||
|
|
a837a27dc0 | ||
|
|
8dcec0dfa8 | ||
|
|
85b90b13e4 | ||
|
|
79c173aaff | ||
|
|
f69d393acd | ||
|
|
bebb71b1de | ||
|
|
2f12236ac8 | ||
|
|
a7bfef5ed7 | ||
|
|
4ad65f00b5 | ||
|
|
9993436029 | ||
|
|
1f156170cf | ||
|
|
81247d8cf4 | ||
|
|
5929e81337 | ||
|
|
d8267838ae | ||
|
|
8f450b525b | ||
|
|
681441df7e | ||
|
|
e02c26e703 | ||
|
|
1b9e45b5f9 | ||
|
|
6a0090987c | ||
|
|
02d3f6cc64 | ||
|
|
2e964ba9c2 | ||
|
|
a2c0994bde | ||
|
|
d0e257a364 | ||
|
|
8c5165a06c | ||
|
|
422283a3ac | ||
|
|
24225a3748 | ||
|
|
0b59384130 | ||
|
|
d04822b770 | ||
|
|
84648c67cf | ||
|
|
42112fcca9 | ||
|
|
2bbb7153e7 | ||
|
|
dc0c75964d | ||
|
|
c7c6569c4b | ||
|
|
28d3e981c5 | ||
|
|
3bd9d85ae2 | ||
|
|
b43c66c0bb | ||
|
|
2a002d8e82 | ||
|
|
324d7362c7 | ||
|
|
3dc4b60af1 | ||
|
|
33a885a309 | ||
|
|
4f1cb8abcc | ||
|
|
21e7a75cc9 | ||
|
|
3ef6e4a853 | ||
|
|
bd70c4a24a | ||
|
|
aaf7519e94 | ||
|
|
28cdc3f61b | ||
|
|
4068bc1661 | ||
|
|
1204daa330 | ||
|
|
f8b2b5a759 | ||
|
|
f3e2dfc4de | ||
|
|
a6e0c142ca | ||
|
|
d9e9fea2f7 | ||
|
|
978a16f397 | ||
|
|
d21b984918 | ||
|
|
c308bcb993 | ||
|
|
15103007a5 | ||
|
|
a932b5a483 | ||
|
|
9b96514b91 | ||
|
|
a33142e29e | ||
|
|
ef9df5265b | ||
|
|
bc8a2727c3 | ||
|
|
17a1b823fc | ||
|
|
993f0c22d5 | ||
|
|
bd42aad340 | ||
|
|
fcd3afe29d | ||
|
|
ed62fe91a2 | ||
|
|
3040c621a7 | ||
|
|
2f49a36ccc | ||
|
|
d551df34ed | ||
|
|
2fadae2e3d | ||
|
|
2e3ae755ea | ||
|
|
067206b536 | ||
|
|
aae6cc705f | ||
|
|
96b126588d | ||
|
|
a70039abb5 | ||
|
|
6fca3339fc | ||
|
|
c668ac0004 | ||
|
|
88d6fc29f0 | ||
|
|
e556b0227a | ||
|
|
d7b8f91223 | ||
|
|
f2cddcae7c | ||
|
|
c9304bdbba | ||
|
|
117e7fa6ff | ||
|
|
6bec4ca2d2 | ||
|
|
1b8dcd1c1b | ||
|
|
f2f81f5239 | ||
|
|
7d7c94cd91 | ||
|
|
eeb2e6cb1a | ||
|
|
6ac18b251c | ||
|
|
11a9ab7b96 | ||
|
|
b87737f55e | ||
|
|
dde6a3d805 | ||
|
|
71dbb512a6 | ||
|
|
b7ddeb3b50 | ||
|
|
175cb3d3f4 | ||
|
|
73508835c8 | ||
|
|
336c6b43fb | ||
|
|
bfed55318c | ||
|
|
a3e80a6378 | ||
|
|
92b78a893d | ||
|
|
758fdb9854 | ||
|
|
44f8f64935 | ||
|
|
8f0a74df6b | ||
|
|
0efe4c4365 | ||
|
|
04337059e4 | ||
|
|
af0663317b | ||
|
|
e4d0e471d9 | ||
|
|
cb45138c5f | ||
|
|
917631181a | ||
|
|
9ac58e605d | ||
|
|
6d21b1a8fe | ||
|
|
ae7fa3bbb9 | ||
|
|
2895136eab | ||
|
|
7b83c8d2cc | ||
|
|
43cc83edf4 | ||
|
|
a33af67494 | ||
|
|
eec8f3e797 | ||
|
|
5011b2c3f1 | ||
|
|
980142c6ad | ||
|
|
1fe710f4a3 | ||
|
|
472c494fd4 | ||
|
|
ccbb5dafe5 | ||
|
|
939d3a36a4 | ||
|
|
4c19f51a04 | ||
|
|
b34eaccd35 | ||
|
|
52211def51 | ||
|
|
62f619da99 | ||
|
|
2496fa9245 |
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
||||
open_collective: opencore-legacy-patcher
|
||||
1
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -12,7 +12,6 @@ body:
|
||||
label: Machine Model
|
||||
description: What model was being patched?
|
||||
options:
|
||||
- MacBook4,1
|
||||
- MacBook5,1
|
||||
- MacBook5,2
|
||||
- MacBook6,1
|
||||
|
||||
126
.github/workflows/build-app-wxpython.yml
vendored
@@ -2,6 +2,8 @@ name: CI - Build wxPython
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
workflow_dispatch:
|
||||
release:
|
||||
types: [published]
|
||||
@@ -9,36 +11,114 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
name: Build wxPython
|
||||
runs-on: x86_64_mojave
|
||||
runs-on: x86_64_monterey
|
||||
if: github.repository_owner == 'dortania'
|
||||
|
||||
env:
|
||||
# GitHub Information
|
||||
branch: ${{ github.ref }}
|
||||
commiturl: ${{ github.event.head_commit.url }}${{ github.event.release.html_url }}
|
||||
commitdate: ${{ github.event.head_commit.timestamp }}${{ github.event.release.published_at }}
|
||||
MAC_NOTARIZATION_USERNAME: ${{ secrets.MAC_NOTARIZATION_USERNAME }}
|
||||
MAC_NOTARIZATION_PASSWORD: ${{ secrets.MAC_NOTARIZATION_PASSWORD }}
|
||||
|
||||
# Analytics
|
||||
ANALYTICS_KEY: ${{ secrets.ANALYTICS_KEY }}
|
||||
ANALYTICS_SITE: ${{ secrets.ANALYTICS_SITE }}
|
||||
|
||||
# App Signing
|
||||
ORG_MAC_DEVELOPER_ID_APPLICATION_IDENTITY: ${{ secrets.ORG_MAC_DEVELOPER_ID_APPLICATION_IDENTITY }}
|
||||
|
||||
# PKG Signing
|
||||
ORG_MAC_DEVELOPER_ID_INSTALLER_IDENTITY: ${{ secrets.ORG_MAC_DEVELOPER_ID_INSTALLER_IDENTITY }}
|
||||
|
||||
# Notarization
|
||||
ORG_MAC_NOTARIZATION_TEAM_ID: ${{ secrets.ORG_MAC_NOTARIZATION_TEAM_ID }}
|
||||
ORG_MAC_NOTARIZATION_APPLE_ID: ${{ secrets.ORG_MAC_NOTARIZATION_APPLE_ID }}
|
||||
ORG_MAC_NOTARIZATION_PASSWORD: ${{ secrets.ORG_MAC_NOTARIZATION_PASSWORD }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- run: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 Build-Binary.command --reset_binaries --branch "${{ env.branch }}" --commit "${{ env.commiturl }}" --commit_date "${{ env.commitdate }}"
|
||||
- run: 'codesign -s "Developer ID Application: Mykola Grymalyuk (S74BDJXQMD)" -v --force --deep --timestamp --entitlements ./payloads/entitlements.plist -o runtime "dist/OpenCore-Patcher.app"'
|
||||
- run: cd dist; ditto -c -k --sequesterRsrc --keepParent OpenCore-Patcher.app ../OpenCore-Patcher-wxPython.app.zip
|
||||
- run: xcrun altool --notarize-app --primary-bundle-id "com.dortania.opencore-legacy-patcher" --username "${{ env.MAC_NOTARIZATION_USERNAME }}" --password "${{ env.MAC_NOTARIZATION_PASSWORD }}" --file OpenCore-Patcher-wxPython.app.zip
|
||||
- run: packagesbuild ./payloads/InstallPackage/AutoPkg-Assets-Setup.pkgproj
|
||||
- run: mv ./OpenCore-Patcher-wxPython.app.zip ./OpenCore-Patcher-GUI.app.zip
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
# - name: Import Application Signing Certificate
|
||||
# uses: dhinakg/import-codesign-certs@master
|
||||
# with:
|
||||
# p12-file-base64: ${{ secrets.ORG_MAC_DEVELOPER_ID_APPLICATION_CERT_P12_BASE64 }}
|
||||
# p12-password: ${{ secrets.ORG_MAC_DEVELOPER_ID_APPLICATION_CERT_P12_PASSWORD }}
|
||||
|
||||
# - name: Import Installer Signing Certificate
|
||||
# uses: dhinakg/import-codesign-certs@master
|
||||
# with:
|
||||
# p12-file-base64: ${{ secrets.ORG_MAC_DEVELOPER_ID_INSTALLER_CERT_P12_BASE64 }}
|
||||
# p12-password: ${{ secrets.ORG_MAC_DEVELOPER_ID_INSTALLER_CERT_P12_PASSWORD }}
|
||||
|
||||
# - name: Install Dependencies
|
||||
# run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 -m pip install -r requirements.txt
|
||||
|
||||
# - name: Force Universal2 charset for Python
|
||||
# run: |
|
||||
# /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 -m pip uninstall -y charset_normalizer
|
||||
# /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 -m pip download --platform macosx_10_9_universal2 --only-binary=:all: charset-normalizer
|
||||
# /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 -m pip install charset_normalizer-*-macosx_10_9_universal2.whl
|
||||
|
||||
- name: Prepare Assets (--prepare-assets)
|
||||
run: >
|
||||
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 Build-Project.command
|
||||
--run-as-individual-steps --reset-dmg-cache
|
||||
--prepare-assets
|
||||
|
||||
- name: Prepare Application (--prepare-application)
|
||||
run: >
|
||||
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 Build-Project.command
|
||||
--application-signing-identity "${{ env.ORG_MAC_DEVELOPER_ID_APPLICATION_IDENTITY }}"
|
||||
--notarization-apple-id "${{ env.ORG_MAC_NOTARIZATION_APPLE_ID }}" --notarization-password "${{ env.ORG_MAC_NOTARIZATION_PASSWORD }}" --notarization-team-id "${{ env.ORG_MAC_NOTARIZATION_TEAM_ID }}"
|
||||
--git-branch "${{ env.branch }}" --git-commit-url "${{ env.commiturl }}" --git-commit-date "${{ env.commitdate }}"
|
||||
--analytics-key "${{ env.ANALYTICS_KEY }}" --analytics-endpoint "${{ env.ANALYTICS_SITE }}"
|
||||
--reset-pyinstaller-cache
|
||||
--run-as-individual-steps
|
||||
--prepare-application
|
||||
|
||||
- name: Prepare Package (--prepare-package)
|
||||
run: >
|
||||
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 Build-Project.command
|
||||
--installer-signing-identity "${{ env.ORG_MAC_DEVELOPER_ID_INSTALLER_IDENTITY }}"
|
||||
--notarization-apple-id "${{ env.ORG_MAC_NOTARIZATION_APPLE_ID }}" --notarization-password "${{ env.ORG_MAC_NOTARIZATION_PASSWORD }}" --notarization-team-id "${{ env.ORG_MAC_NOTARIZATION_TEAM_ID }}"
|
||||
--run-as-individual-steps
|
||||
--prepare-package
|
||||
|
||||
- name: Prepare Update Shim (--prepare-shim)
|
||||
run: >
|
||||
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 Build-Project.command
|
||||
--application-signing-identity "${{ env.ORG_MAC_DEVELOPER_ID_APPLICATION_IDENTITY }}"
|
||||
--notarization-apple-id "${{ env.ORG_MAC_NOTARIZATION_APPLE_ID }}" --notarization-password "${{ env.ORG_MAC_NOTARIZATION_PASSWORD }}" --notarization-team-id "${{ env.ORG_MAC_NOTARIZATION_TEAM_ID }}"
|
||||
--run-as-individual-steps
|
||||
--prepare-shim
|
||||
|
||||
- name: Prepare App for Upload
|
||||
run: /bin/mv ./dist/OpenCore-Patcher.app.zip ./OpenCore-Patcher-GUI.app.zip
|
||||
|
||||
- name: Upload App to Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: OpenCore-Patcher.app (GUI)
|
||||
path: OpenCore-Patcher-GUI.app.zip
|
||||
|
||||
- name: Upload Package to Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
- name: Upload AutoPkg Package to Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: AutoPkg-Assets.pkg
|
||||
path: ./dist/AutoPkg-Assets.pkg
|
||||
|
||||
- name: Upload Installation Package to Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: OpenCore-Patcher.pkg
|
||||
path: ./dist/OpenCore-Patcher.pkg
|
||||
|
||||
- name: Upload Uninstaller Package to Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: OpenCore-Patcher-Uninstaller.pkg
|
||||
path: ./dist/OpenCore-Patcher-Uninstaller.pkg
|
||||
|
||||
- name: Upload Binary to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
@@ -48,11 +128,29 @@ jobs:
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
|
||||
- name: Upload Package to Release
|
||||
- name: Upload AutoPkg Package to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: ./dist/AutoPkg-Assets.pkg
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
|
||||
- name: Upload Installation Package to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: ./dist/OpenCore-Patcher.pkg
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
|
||||
- name: Upload Uninstaller Package to Release
|
||||
if: github.event_name == 'release'
|
||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: ./dist/OpenCore-Patcher-Uninstaller.pkg
|
||||
tag: ${{ github.ref }}
|
||||
file_glob: true
|
||||
58
.github/workflows/build-site.yml
vendored
@@ -1,36 +1,52 @@
|
||||
name: CI - Build Site
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- gh-pages
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build Site and Deploy
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository_owner == 'dortania'
|
||||
steps:
|
||||
- uses: actions/setup-node@v3
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
submodules: "recursive"
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
fetch-depth: '0'
|
||||
persist-credentials: false
|
||||
submodules: 'recursive'
|
||||
- name: Install
|
||||
run: npm install
|
||||
working-directory: 'docs'
|
||||
node-version: "22"
|
||||
cache: "yarn"
|
||||
cache-dependency-path: ./docs/yarn.lock
|
||||
- name: Install Dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
working-directory: docs
|
||||
- name: Build
|
||||
run: npm run build
|
||||
working-directory: 'docs'
|
||||
- name: Deploy
|
||||
uses: JamesIves/github-pages-deploy-action@3.7.1
|
||||
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main'}}
|
||||
run: yarn run build
|
||||
working-directory: docs
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
|
||||
BRANCH: gh-pages
|
||||
FOLDER: docs/.vuepress/dist/
|
||||
CLEAN: true
|
||||
path: docs/.vuepress/dist/
|
||||
deploy:
|
||||
if: ${{ github.repository_owner == 'dortania' && github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
25
.github/workflows/validate-external.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
name: CI - Validation (External)
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
workflow_dispatch:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Validate
|
||||
runs-on: macos-latest
|
||||
if: github.repository_owner != 'dortania'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Install Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.10'
|
||||
- name: Install Dependencies
|
||||
run: python3 -m pip install -r requirements.txt
|
||||
- name: Validate
|
||||
run: python3 OpenCore-Patcher-GUI.command --validate
|
||||
13
.github/workflows/validate.yml
vendored
@@ -2,6 +2,8 @@ name: CI - Validation
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
workflow_dispatch:
|
||||
release:
|
||||
types: [published]
|
||||
@@ -9,12 +11,9 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
name: Validate
|
||||
runs-on: x86_64_mojave
|
||||
runs-on: x86_64_monterey
|
||||
if: github.repository_owner == 'dortania'
|
||||
env:
|
||||
branch: ${{ github.ref }}
|
||||
commiturl: ${{ github.event.head_commit.url }}${{ github.event.release.html_url }}
|
||||
commitdate: ${{ github.event.head_commit.timestamp }}${{ github.event.release.published_at }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- run: /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 OpenCore-Patcher-GUI.command --validate
|
||||
- uses: actions/checkout@v4
|
||||
- name: Validate
|
||||
run: /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 OpenCore-Patcher-GUI.command --validate
|
||||
|
||||
8
.gitignore
vendored
@@ -17,7 +17,6 @@ __pycache__/
|
||||
*$py.class
|
||||
/docs/.vuepress/dist
|
||||
/docs/.vuepress/.config.js.swp
|
||||
/docs/yarn.lock
|
||||
/docs/yarn-error.log
|
||||
/docs/node_modules/
|
||||
/payloads/List.txt
|
||||
@@ -30,6 +29,13 @@ __pycache__/
|
||||
/payloads/OpenCore-Legacy-Patcher
|
||||
/payloads/InstallAssistant.pkg.integrityDataV1
|
||||
/payloads.dmg
|
||||
/Universal-Binaries.dmg
|
||||
/payloads/OpenCore-Legacy-Patcher-*.plist
|
||||
/payloads/KDK.dmg
|
||||
*.log
|
||||
/Universal-Binaries.dmg
|
||||
/payloads/KDKInfo.plist
|
||||
/payloads/update.sh
|
||||
/payloads/OpenCore-Patcher.app
|
||||
/.x86_64_venv
|
||||
*afdesign~lock~
|
||||
|
||||
@@ -1,366 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Generate stand alone application for OpenCore-Patcher
|
||||
# Copyright (C) 2022-2023 - Mykola Grymalyuk
|
||||
|
||||
from pathlib import Path
|
||||
import time
|
||||
import argparse
|
||||
import os
|
||||
import subprocess
|
||||
import plistlib
|
||||
import time
|
||||
import sys
|
||||
|
||||
from resources import constants
|
||||
|
||||
|
||||
class CreateBinary:
|
||||
"""
|
||||
Library for creating OpenCore-Patcher application
|
||||
|
||||
This script's main purpose is to handle the following:
|
||||
- Download external dependancies (ex. PatcherSupportPkg)
|
||||
- Convert payloads directory into DMG
|
||||
- Build Binary via Pyinstaller
|
||||
- Patch 'LC_VERSION_MIN_MACOSX' to OS X 10.10
|
||||
- Add commit data to Info.plist
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
start = time.time()
|
||||
print("- Starting build script")
|
||||
|
||||
self.args = self._parse_arguments()
|
||||
|
||||
self._set_cwd()
|
||||
|
||||
self._preflight_processes()
|
||||
self._build_binary()
|
||||
self._postflight_processes()
|
||||
print(f"- Build script completed in {str(round(time.time() - start, 2))} seconds")
|
||||
|
||||
|
||||
def _set_cwd(self):
|
||||
"""
|
||||
Initialize current working directory to parent of this script
|
||||
"""
|
||||
|
||||
os.chdir(Path(__file__).resolve().parent)
|
||||
print(f"- Current Working Directory: \n\t{os.getcwd()}")
|
||||
|
||||
|
||||
def _parse_arguments(self):
|
||||
"""
|
||||
Parse arguments passed to script
|
||||
"""
|
||||
|
||||
parser = argparse.ArgumentParser(description='Builds OpenCore-Patcher binary')
|
||||
parser.add_argument('--branch', type=str, help='Git branch name')
|
||||
parser.add_argument('--commit', type=str, help='Git commit URL')
|
||||
parser.add_argument('--commit_date', type=str, help='Git commit date')
|
||||
parser.add_argument('--reset_binaries', action='store_true', help='Force redownload and imaging of payloads')
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
||||
def _setup_pathing(self):
|
||||
"""
|
||||
Initialize pathing for pyinstaller
|
||||
"""
|
||||
|
||||
python_path = sys.executable
|
||||
python_binary = python_path.split("/")[-1]
|
||||
python_bin_dir = python_path.strip(python_binary)
|
||||
|
||||
# macOS (using Python installed by homebrew (e.g. brew))
|
||||
if f"/usr/local/opt/python@3." in sys.executable:
|
||||
print(f"\t* NOTE: home(brew) python3 detected; using (sys.exec_prefix, python_path) ==> {sys.exec_prefix, python_path}")
|
||||
# - under brew, pip3 will install pyinstaller at:
|
||||
# /usr/local/lib/python3.9/site-packages/pyinstaller
|
||||
# and /usr/local/bin/pyinstaller stub to load and run.
|
||||
|
||||
pyinstaller_path = f"/usr/local/bin/pyinstaller"
|
||||
else:
|
||||
pyinstaller_path = f"{python_bin_dir}pyinstaller"
|
||||
|
||||
if not Path(pyinstaller_path).exists():
|
||||
print(f" - pyinstaller not found:\n\t{pyinstaller_path}")
|
||||
raise Exception("pyinstaller not found")
|
||||
|
||||
self.pyinstaller_path = pyinstaller_path
|
||||
|
||||
|
||||
def _preflight_processes(self):
|
||||
"""
|
||||
Start preflight processes
|
||||
"""
|
||||
|
||||
print("- Starting preflight processes")
|
||||
self._setup_pathing()
|
||||
self._delete_extra_binaries()
|
||||
self._download_resources()
|
||||
self._generate_payloads_dmg()
|
||||
|
||||
|
||||
def _postflight_processes(self):
|
||||
"""
|
||||
Start postflight processes
|
||||
"""
|
||||
|
||||
print("- Starting postflight processes")
|
||||
self._patch_load_command()
|
||||
self._add_commit_data()
|
||||
self._post_flight_cleanup()
|
||||
self._mini_validate()
|
||||
|
||||
|
||||
def _build_binary(self):
|
||||
"""
|
||||
Build binary via pyinstaller
|
||||
"""
|
||||
|
||||
if Path(f"./dist/OpenCore-Patcher.app").exists():
|
||||
print("- Found OpenCore-Patcher.app, removing...")
|
||||
rm_output = subprocess.run(
|
||||
["rm", "-rf", "./dist/OpenCore-Patcher.app"],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
if rm_output.returncode != 0:
|
||||
print("- Remove failed")
|
||||
print(rm_output.stderr.decode('utf-8'))
|
||||
raise Exception("Remove failed")
|
||||
|
||||
|
||||
print("- Building GUI binary...")
|
||||
build_args = [self.pyinstaller_path, "./OpenCore-Patcher-GUI.spec", "--noconfirm"]
|
||||
|
||||
build_result = subprocess.run(build_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
if build_result.returncode != 0:
|
||||
print("- Build failed")
|
||||
print(build_result.stderr.decode('utf-8'))
|
||||
raise Exception("Build failed")
|
||||
|
||||
|
||||
def _delete_extra_binaries(self):
|
||||
"""
|
||||
Delete extra binaries from payloads directory
|
||||
"""
|
||||
|
||||
whitelist_folders = [
|
||||
"ACPI",
|
||||
"Config",
|
||||
"Drivers",
|
||||
"Icon",
|
||||
"InstallPackage",
|
||||
"Kexts",
|
||||
"OpenCore",
|
||||
"Tools",
|
||||
]
|
||||
|
||||
whitelist_files = [
|
||||
"com.dortania.opencore-legacy-patcher.auto-patch.plist",
|
||||
"entitlements.plist",
|
||||
"launcher.sh",
|
||||
"OC-Patcher-TUI.icns",
|
||||
"OC-Patcher.icns",
|
||||
"Universal-Binaries.zip",
|
||||
]
|
||||
|
||||
|
||||
print("- Deleting extra binaries...")
|
||||
for file in Path("payloads").glob(pattern="*"):
|
||||
if file.is_dir():
|
||||
if file.name in whitelist_folders:
|
||||
continue
|
||||
print(f" - Deleting {file.name}")
|
||||
subprocess.run(["rm", "-rf", file])
|
||||
else:
|
||||
if file.name in whitelist_files:
|
||||
continue
|
||||
print(f" - Deleting {file.name}")
|
||||
subprocess.run(["rm", "-f", file])
|
||||
|
||||
|
||||
def _download_resources(self):
|
||||
"""
|
||||
Download required dependencies
|
||||
"""
|
||||
|
||||
patcher_support_pkg_version = constants.Constants().patcher_support_pkg_version
|
||||
required_resources = [
|
||||
"Universal-Binaries.zip"
|
||||
]
|
||||
|
||||
print("- Downloading required resources...")
|
||||
for resource in required_resources:
|
||||
if Path(f"./payloads/{resource}").exists():
|
||||
if self.args.reset_binaries:
|
||||
print(f" - Removing old {resource}")
|
||||
rm_output = subprocess.run(
|
||||
["rm", "-rf", f"./payloads/{resource}"],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
if rm_output.returncode != 0:
|
||||
print("- Remove failed")
|
||||
print(rm_output.stderr.decode('utf-8'))
|
||||
raise Exception("Remove failed")
|
||||
else:
|
||||
print(f" - {resource} already exists, skipping download")
|
||||
continue
|
||||
print(f" - Downloading {resource}...")
|
||||
|
||||
download_result = subprocess.run(
|
||||
[
|
||||
"curl", "-LO",
|
||||
f"https://github.com/dortania/PatcherSupportPkg/releases/download/{patcher_support_pkg_version}/{resource}"
|
||||
],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
|
||||
if download_result.returncode != 0:
|
||||
print(" - Download failed")
|
||||
print(download_result.stderr.decode('utf-8'))
|
||||
raise Exception("Download failed")
|
||||
if not Path(f"./{resource}").exists():
|
||||
print(f" - {resource} not found")
|
||||
raise Exception(f"{resource} not found")
|
||||
|
||||
print(" - Moving into payloads")
|
||||
mv_output = subprocess.run(["mv", resource, "./payloads/"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
if mv_output.returncode != 0:
|
||||
print(" - Move failed")
|
||||
print(mv_output.stderr.decode('utf-8'))
|
||||
raise Exception("Move failed")
|
||||
|
||||
|
||||
def _generate_payloads_dmg(self):
|
||||
"""
|
||||
Generate disk image containing all payloads
|
||||
Disk image will be password protected due to issues with
|
||||
Apple's notarization system and inclusion of kernel extensions
|
||||
"""
|
||||
|
||||
if Path("./payloads.dmg").exists():
|
||||
if not self.args.reset_binaries:
|
||||
print(" - payloads.dmg already exists, skipping creation")
|
||||
return
|
||||
|
||||
print(" - Removing old payloads.dmg")
|
||||
rm_output = subprocess.run(
|
||||
["rm", "-rf", "./payloads.dmg"],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
if rm_output.returncode != 0:
|
||||
print("- Remove failed")
|
||||
print(rm_output.stderr.decode('utf-8'))
|
||||
raise Exception("Remove failed")
|
||||
|
||||
print(" - Generating DMG...")
|
||||
dmg_output = subprocess.run([
|
||||
'hdiutil', 'create', './payloads.dmg',
|
||||
'-megabytes', '32000',
|
||||
'-format', 'UDZO', '-ov',
|
||||
'-volname', 'payloads',
|
||||
'-fs', 'HFS+',
|
||||
'-srcfolder', './payloads',
|
||||
'-passphrase', 'password', '-encryption'
|
||||
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
if dmg_output.returncode != 0:
|
||||
print(" - DMG generation failed")
|
||||
print(dmg_output.stderr.decode('utf-8'))
|
||||
raise Exception("DMG generation failed")
|
||||
|
||||
print(" - DMG generation complete")
|
||||
|
||||
|
||||
def _add_commit_data(self):
|
||||
"""
|
||||
Add commit data to Info.plist
|
||||
"""
|
||||
|
||||
if not self.args.branch and not self.args.commit and not self.args.commit_date:
|
||||
print(" - No commit data provided, adding source info")
|
||||
branch = "Built from source"
|
||||
commit_url = ""
|
||||
commit_date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
||||
else:
|
||||
branch = self.args.branch
|
||||
commit_url = self.args.commit
|
||||
commit_date = self.args.commit_date
|
||||
print(" - Adding commit data to Info.plist")
|
||||
plist_path = Path("./dist/OpenCore-Patcher.app/Contents/Info.plist")
|
||||
plist = plistlib.load(Path(plist_path).open("rb"))
|
||||
plist["Github"] = {
|
||||
"Branch": branch,
|
||||
"Commit URL": commit_url,
|
||||
"Commit Date": commit_date,
|
||||
}
|
||||
plistlib.dump(plist, Path(plist_path).open("wb"), sort_keys=True)
|
||||
|
||||
|
||||
def _patch_load_command(self):
|
||||
"""
|
||||
Patch LC_VERSION_MIN_MACOSX in Load Command to report 10.10
|
||||
|
||||
By default Pyinstaller will create binaries supporting 10.13+
|
||||
However this limitation is entirely arbitrary for our libraries
|
||||
and instead we're able to support 10.10 without issues.
|
||||
|
||||
To verify set version:
|
||||
otool -l ./dist/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
|
||||
|
||||
cmd LC_VERSION_MIN_MACOSX
|
||||
cmdsize 16
|
||||
version 10.13
|
||||
sdk 10.9
|
||||
|
||||
"""
|
||||
|
||||
print(" - Patching LC_VERSION_MIN_MACOSX")
|
||||
path = './dist/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher'
|
||||
find = b'\x00\x0D\x0A\x00' # 10.13 (0xA0D)
|
||||
replace = b'\x00\x0A\x0A\x00' # 10.10 (0xA0A)
|
||||
with open(path, 'rb') as f:
|
||||
data = f.read()
|
||||
data = data.replace(find, replace, 1)
|
||||
with open(path, 'wb') as f:
|
||||
f.write(data)
|
||||
|
||||
|
||||
def _post_flight_cleanup(self):
|
||||
"""
|
||||
Post flight cleanup
|
||||
"""
|
||||
|
||||
path = "./dist/OpenCore-Patcher"
|
||||
print(f" - Removing {path}")
|
||||
rm_output = subprocess.run(
|
||||
["rm", "-rf", path],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
if rm_output.returncode != 0:
|
||||
print(f" - Remove failed: {path}")
|
||||
print(rm_output.stderr.decode('utf-8'))
|
||||
raise Exception(f"Remove failed: {path}")
|
||||
|
||||
|
||||
def _mini_validate(self):
|
||||
"""
|
||||
Validate generated binary
|
||||
"""
|
||||
|
||||
print(" - Validating binary")
|
||||
validate_output = subprocess.run(
|
||||
["./dist/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher", "--build", "--model", "MacPro3,1"],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
if validate_output.returncode != 0:
|
||||
print(" - Validation failed")
|
||||
print(validate_output.stderr.decode('utf-8'))
|
||||
raise Exception("Validation failed")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
CreateBinary()
|
||||
168
Build-Project.command
Executable file
@@ -0,0 +1,168 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Build-Project.command: Generate OpenCore-Patcher.app and OpenCore-Patcher.pkg
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import argparse
|
||||
import plistlib
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from ci_tooling.build_modules import (
|
||||
application,
|
||||
disk_images,
|
||||
package,
|
||||
sign_notarize,
|
||||
shim
|
||||
)
|
||||
|
||||
from opencore_legacy_patcher import constants
|
||||
|
||||
|
||||
def main() -> None:
|
||||
"""
|
||||
Parse Command Line Arguments
|
||||
"""
|
||||
|
||||
parser = argparse.ArgumentParser(description="Build OpenCore Legacy Patcher Suite", add_help=False)
|
||||
|
||||
# Signing Parameters
|
||||
parser.add_argument("--application-signing-identity", type=str, help="Application Signing Identity")
|
||||
parser.add_argument("--installer-signing-identity", type=str, help="Installer Signing Identity")
|
||||
|
||||
|
||||
# Notarization Parameters
|
||||
parser.add_argument("--notarization-apple-id", type=str, help="Notarization Apple ID", default=None)
|
||||
parser.add_argument("--notarization-password", type=str, help="Notarization Password", default=None)
|
||||
parser.add_argument("--notarization-team-id", type=str, help="Notarization Team ID", default=None)
|
||||
|
||||
# GitHub Actions CI/CD Parameters
|
||||
parser.add_argument("--git-branch", type=str, help="Git Branch", default=None)
|
||||
parser.add_argument("--git-commit-url", type=str, help="Git Commit URL", default=None)
|
||||
parser.add_argument("--git-commit-date", type=str, help="Git Commit Date", default=None)
|
||||
|
||||
# Local Build Parameters
|
||||
parser.add_argument("--reset-dmg-cache", action="store_true", help="Redownload PatcherSupportPkg.dmg and regenerate payloads.dmg", default=False)
|
||||
parser.add_argument("--reset-pyinstaller-cache", action="store_true", help="Clean PyInstaller Cache", default=False)
|
||||
|
||||
# CI/CD Parameters for individual steps
|
||||
# If not specified, will run all steps
|
||||
parser.add_argument("--run-as-individual-steps", action="store_true", help="CI: Run as individual steps", default=False)
|
||||
parser.add_argument("--prepare-application", action="store_true", help="CI: Prepare Application", default=False)
|
||||
parser.add_argument("--prepare-package", action="store_true", help="CI: Prepare Package", default=False)
|
||||
parser.add_argument("--prepare-assets", action="store_true", help="CI: Prepare Assets", default=False)
|
||||
|
||||
# CI/CD Parameters for additional steps
|
||||
# If not specified, will not run additional steps
|
||||
parser.add_argument("--prepare-shim", action="store_true", help="CI: Prepare Update Shim", default=False)
|
||||
|
||||
# Analytics Parameters
|
||||
parser.add_argument("--analytics-key", type=str, help="Analytics Key", default=None)
|
||||
parser.add_argument("--analytics-endpoint", type=str, help="Analytics Endpoint", default=None)
|
||||
|
||||
# Help
|
||||
parser.add_argument("--help", action="store_true", help="Show this help message and exit", default=False)
|
||||
|
||||
# Parse Arguments
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.help:
|
||||
parser.print_help()
|
||||
print("\n\nIf running outside of CI/CD, simply run the following command:")
|
||||
print("$ python3 Build-Project.command")
|
||||
sys.exit(0)
|
||||
|
||||
# Set 'Current Working Directory' to script directory
|
||||
os.chdir(Path(__file__).resolve().parent)
|
||||
|
||||
|
||||
if (args.run_as_individual_steps is False) or (args.run_as_individual_steps and args.prepare_assets):
|
||||
# Prepare workspace
|
||||
disk_images.GenerateDiskImages(args.reset_dmg_cache).generate()
|
||||
|
||||
if (args.run_as_individual_steps is False) or (args.run_as_individual_steps and args.prepare_application):
|
||||
# Prepare Privileged Helper Tool
|
||||
sign_notarize.SignAndNotarize(
|
||||
path=Path("./ci_tooling/privileged_helper_tool/com.dortania.opencore-legacy-patcher.privileged-helper"),
|
||||
signing_identity=args.application_signing_identity,
|
||||
notarization_apple_id=args.notarization_apple_id,
|
||||
notarization_password=args.notarization_password,
|
||||
notarization_team_id=args.notarization_team_id,
|
||||
).sign_and_notarize()
|
||||
|
||||
# Build OpenCore-Patcher.app
|
||||
application.GenerateApplication(
|
||||
reset_pyinstaller_cache=args.reset_pyinstaller_cache,
|
||||
git_branch=args.git_branch,
|
||||
git_commit_url=args.git_commit_url,
|
||||
git_commit_date=args.git_commit_date,
|
||||
analytics_key=args.analytics_key,
|
||||
analytics_endpoint=args.analytics_endpoint,
|
||||
).generate()
|
||||
|
||||
# Sign OpenCore-Patcher.app
|
||||
sign_notarize.SignAndNotarize(
|
||||
path=Path("dist/OpenCore-Patcher.app"),
|
||||
signing_identity=args.application_signing_identity,
|
||||
notarization_apple_id=args.notarization_apple_id,
|
||||
notarization_password=args.notarization_password,
|
||||
notarization_team_id=args.notarization_team_id,
|
||||
entitlements=Path("./ci_tooling/entitlements/entitlements.plist"),
|
||||
).sign_and_notarize()
|
||||
|
||||
|
||||
if (args.run_as_individual_steps is False) or (args.run_as_individual_steps and args.prepare_package):
|
||||
# Build OpenCore-Patcher.pkg and OpenCore-Patcher-Uninstaller.pkg
|
||||
package.GeneratePackage().generate()
|
||||
|
||||
# Sign OpenCore-Patcher.pkg
|
||||
sign_notarize.SignAndNotarize(
|
||||
path=Path("dist/OpenCore-Patcher.pkg"),
|
||||
signing_identity=args.installer_signing_identity,
|
||||
notarization_apple_id=args.notarization_apple_id,
|
||||
notarization_password=args.notarization_password,
|
||||
notarization_team_id=args.notarization_team_id,
|
||||
).sign_and_notarize()
|
||||
|
||||
# Sign OpenCore-Patcher-Uninstaller.pkg
|
||||
sign_notarize.SignAndNotarize(
|
||||
path=Path("dist/OpenCore-Patcher-Uninstaller.pkg"),
|
||||
signing_identity=args.installer_signing_identity,
|
||||
notarization_apple_id=args.notarization_apple_id,
|
||||
notarization_password=args.notarization_password,
|
||||
notarization_team_id=args.notarization_team_id,
|
||||
).sign_and_notarize()
|
||||
|
||||
# Create Update Shim
|
||||
if args.prepare_shim:
|
||||
shim.GenerateShim().generate()
|
||||
if Path("dist/OpenCore-Patcher.app").exists():
|
||||
if Path("dist/OpenCore-Patcher (Original).app").exists():
|
||||
Path("dist/OpenCore-Patcher (Original).app").unlink()
|
||||
Path("dist/OpenCore-Patcher.app").rename("dist/OpenCore-Patcher (Original).app")
|
||||
Path("dist/OpenCore-Patcher (Shim).app").rename("dist/OpenCore-Patcher.app")
|
||||
|
||||
# Update app version in Info.plist
|
||||
plist_path = Path("dist/OpenCore-Patcher.app/Contents/Info.plist")
|
||||
contents = plistlib.load(plist_path.open("rb"))
|
||||
contents["CFBundleVersion"] = constants.Constants().patcher_version
|
||||
contents["CFBundleShortVersionString"] = constants.Constants().patcher_version
|
||||
plistlib.dump(contents, plist_path.open("wb"))
|
||||
|
||||
sign_notarize.SignAndNotarize(
|
||||
path=Path("dist/OpenCore-Patcher.app"),
|
||||
signing_identity=args.application_signing_identity,
|
||||
notarization_apple_id=args.notarization_apple_id,
|
||||
notarization_password=args.notarization_password,
|
||||
notarization_team_id=args.notarization_team_id,
|
||||
entitlements=Path("./ci_tooling/entitlements/entitlements.plist"),
|
||||
).sign_and_notarize()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
_start = time.time()
|
||||
main()
|
||||
print(f"Build script completed in {str(round(time.time() - _start, 2))} seconds")
|
||||
473
CHANGELOG.md
@@ -1,5 +1,478 @@
|
||||
# OpenCore Legacy Patcher changelog
|
||||
|
||||
## 2.0.2
|
||||
- Fix Nvidia Kepler patches not installing on Monterey
|
||||
- Fix `iMac7,1` and `iMac8,1` failing to apply root patches on macOS Sequoia
|
||||
- Avoid downgrading AppleGVA stack on AMD GCN and newer GPUs
|
||||
- Resolves VTDecoderXPC crashes
|
||||
- Thanks @ausdauersportler for the catch!
|
||||
- Resolve glitched widgets on 3802-based GPUs running macOS Sequoia 15.1
|
||||
- Resolve CoreImage crashes on 3802-based GPUs running macOS Sequoia
|
||||
- Resolve missing screen capture crop borders on non-Metal GPUs running macOS Sequoia
|
||||
- Resolve TeraScale 2 HDCP kernel panic
|
||||
- Resolve specific Wallpaper locking up on non-Metal GPUs running macOS Sequoia
|
||||
- Removes unsupported Metal-based wallpaper (Macintosh Wallpaper)
|
||||
- Resolve firmware upload incompatibilities on pre-2012 Macs with 2012+ Airport cards
|
||||
- Thanks @ausdauersportler for the catch!
|
||||
- Resolve `diskutil` failing to be located in the installer creation process
|
||||
- Thanks @niklasravnsborg for the report!
|
||||
- Increment binaries:
|
||||
- PatcherSupportPkg 1.8.3 - release
|
||||
|
||||
## 2.0.1
|
||||
- Fix MacBookPro13,3 listing 'Available patches' after having installed all applicable patches
|
||||
- Fix Nvidia Tesla and Kepler patches not installing on Monterey (and older if applicable)
|
||||
- Fix Nvidia Web Drivers incorrectly listing 'OpenGL', 'compat' and 'nvda_drv(_vrl)' missing
|
||||
|
||||
## 2.0.0
|
||||
- Set `AssociatedBundleIdentifiers` property in launch services as an array
|
||||
- Move to auto-generated pre/postinstall scripts for PKGs
|
||||
- Streamlines PKG creation process, ensuring Install and AutoPKG scripts are always in sync
|
||||
- Add support for `gktool` in PKG postinstall scripts
|
||||
- Removes Gatekeeper "verifying" prompt on first launch after PKG installation
|
||||
- Note `gktool` is only available on macOS Sonoma and newer
|
||||
- Resolve unpatching crash edge case when host doesn't require patches.
|
||||
- Implement new Software Update Catalog Parser for macOS Installers
|
||||
- Implement new Copy on Write detection mechanism for all file copying operations
|
||||
- Implemented using `getattrlist` and `VOL_CAP_INT_CLONE` flag
|
||||
- Helps improve performance on APFS volumes
|
||||
- Increase model range for S1X/S3X patching to include Haswell Macs and `MacPro6,1`
|
||||
- Helps avoid an issue where older machines with newer, unsupported SSDs would fail to boot
|
||||
- Only affects building EFI from another machine
|
||||
- Resolve AMD Navi MXM GPU detection for modded iMac9,x-12,x
|
||||
- Thanks @Ausdauersportler for the patch!
|
||||
- Implement early macOS Sequoia support:
|
||||
- Supporting Macs with Metal and non-Metal-based graphics:
|
||||
- MacBook5,x - 10,1
|
||||
- MacBookAir2,x - 7,x
|
||||
- MacBookPro4,1 - 14,x
|
||||
- Macmini3,1 - 7,1
|
||||
- iMac7,1 - 18,x
|
||||
- MacPro3,1 - 6,1
|
||||
- MacPro3,1 can only boot with 4 cores max currently
|
||||
- 8 cores can be re-enabled for older OSes in the GUI:
|
||||
- Settings -> Build -> MacPro3,1/Xserve2,1 Workaround
|
||||
- Xserve2,1 - 3,1
|
||||
- Xserve2,1 can only boot with 4 cores max currently
|
||||
- 8 cores can be re-enabled for older OSes in the GUI:
|
||||
- Settings -> Build -> MacPro3,1/Xserve2,1 Workaround
|
||||
- Excludes the newly dropped MacBookAir8,x series.
|
||||
- No estimate can be given when support will be added.
|
||||
- For non-Metal graphics, Photos app will be broken.
|
||||
- No estimate can be given when support will be added.
|
||||
- Implement new MetallibSupportPkg system to support macOS Sequoia on Metal 3802-based GPUs.
|
||||
- See repository for more details: [MetallibSupportPkg](https://github.com/dortania/MetallibSupportPkg).
|
||||
- Implement new Patchset Detection architecture.
|
||||
- Implement new kernel cache building architecture.
|
||||
- Resolve "Label" error in com.dortania.opencore-legacy-patcher.os-caching.plist.
|
||||
- Add macOS Sequoia icons to boot picker and GUI.
|
||||
- Resolve Memoji crashes on 3802 GPUs.
|
||||
- Resolve Photos Memories tab crash on Intel Ivy Bridge/Haswell iGPUs.
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.8.0 - release
|
||||
- OpenCorePkg 1.0.1 - release
|
||||
- Lilu 1.6.8 - release
|
||||
- WhateverGreen 1.6.7 - release
|
||||
- RestrictEvents 1.1.4 - release
|
||||
- FeatureUnlock 1.1.6 - release
|
||||
- DebugEnhancer 1.0.9 - release
|
||||
- CPUFriend 1.2.8 - release
|
||||
- AutoPkgInstaller 1.0.4 - release
|
||||
- CryptexFixup 1.0.3 - release
|
||||
|
||||
## 1.5.0
|
||||
- Restructure project directories
|
||||
- Python:
|
||||
- Move logic into `opencore_legacy_patcher` directory
|
||||
- Use relative imports for local libraries
|
||||
- Documentation:
|
||||
- Move images to `docs/images`
|
||||
- Payloads:
|
||||
- Remove redundant/unused files bundled in payloads.dmg
|
||||
- Resolve unpatching Nvidia Web Drivers failing to clean up `/Library/Extensions`
|
||||
- Implement preflight code signature checks for macOS installer creation
|
||||
- Ensures validity of `createinstallmedia` binary before execution
|
||||
- Modularize AutoPkg's pre/postinstall scripts
|
||||
- Adjusted to use functions for better readability
|
||||
- Implements ZSH shebang
|
||||
- Removes OS logging
|
||||
- Disable usage of `OpenLegacyBoot.efi`
|
||||
- Resolves boot issues on certain CSM-based Macs
|
||||
- Implement new PKG-based installer
|
||||
- `OpenCore-Patcher.pkg` is now the recommended method for installation
|
||||
- `OpenCore-Patcher-Uninstaller.pkg` is now available for uninstallation
|
||||
- Note this only removes the application, not any patches applied
|
||||
- `OpenCore-Patcher-GUI.app.zip` is deprecated and will be removed in future versions
|
||||
- Implement new Privileged Helper Tool
|
||||
- Removes need for password prompts when installing patches, creating installers, etc.
|
||||
- Installed at `/Library/PrivilegedHelperTools/com.dortania.opencore-legacy-patcher.privileged-helper`
|
||||
- No launch services required
|
||||
- For running from source, recompile tool with debug configuration (`make debug`)
|
||||
- Resolve OpenCore-Patcher.app window not appearing as topmost window on launch
|
||||
- Reworked CI tooling:
|
||||
- New build script with reworked parameters: `Build-Project.command`
|
||||
- Remove reliance on WhiteBox's Packages for AutoPkg creation
|
||||
- Now implements `pkgbuild` and `productbuild` for package creation through `macOs-Pkg-Builder` Python module
|
||||
- Implement additional sanity checks before performing root patches
|
||||
- Checks for mismatched snapshots vs root volume macOS versions
|
||||
- Increment Binaries:
|
||||
- OpenCorePkg 1.0.0 - release
|
||||
|
||||
## 1.4.3
|
||||
- Update non-Metal Binaries for macOS Sonoma:
|
||||
- Resolve TeraScale 2 screen recording kernel panic
|
||||
- Resolve Dock location after changing screen resolution
|
||||
- Resolve 14.4 loginwindow crashes
|
||||
- Patch SkipLogo on Macs that natively support Monterey or newer
|
||||
- Resolves missing Apple logo on boot screen
|
||||
- Increment Binaries:
|
||||
- OpenCorePkg 0.9.9 - release
|
||||
|
||||
## 1.4.2
|
||||
- Resolve Auto-Join support for Modern Wireless on macOS 14.4
|
||||
- Applicable for BCM94360, 4360, 4350, 4331 and 43224 chipsets
|
||||
- Resolve WiFi support for Legacy Wireless on macOS 12.7.4 and 13.6.5
|
||||
- Applicable for BCM94328, BCM94322 and Atheros chipsets
|
||||
- Resolve USB 1.1 on macOS Ventura regression from OCLP 1.4.0
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.4.8 - release
|
||||
|
||||
## 1.4.1
|
||||
- Update updater implementation
|
||||
- Resolve Keyboard/Trackpad support for MacBookAir6,x running macOS 14.4 and newer
|
||||
- Expands SPI Keyboard and Trackpad patch to include MacBookAir6,x
|
||||
- Publish Bluetooth NVRAM variables for BCM2046 and BCM2070 chipsets
|
||||
- Reduces need for NVRAM reset to restore Bluetooth support in newer OSes (Thanks @ausdauersportler)
|
||||
|
||||
## 1.4.0
|
||||
- Refactor subprocess invocations
|
||||
- Resolve RecoveryOS support (Regression resolved in OpenCorePkg)
|
||||
- Restore SPI Keyboard and Trackpad support for macOS 14.4 and newer
|
||||
- Applicable for MacBook8,1, MacBookAir7,x and MacBookPro12,1-14,x
|
||||
- Restore support for T1 on macOS 14.4 and newer
|
||||
- Applicable for MacBookPro13,2, MacBookPro13,3, MacBookPro14,2, MacBookPro14,3
|
||||
- Restore support for legacy Metal GPUs on macOS 14.4 and newer
|
||||
- Applicable for:
|
||||
- Intel Ivy Bridge through Skylake
|
||||
- Nvidia Kepler
|
||||
- AMD legacy GCN
|
||||
- Restore support for USB 1.1 on macOS 14.4 and newer
|
||||
- Applicable for Penryn Macs, Xserve3,1 and MacPro4,1/5,1
|
||||
- Resolve support for legacy and modern WiFi on macOS 14.4 and newer
|
||||
- Applicable for all WiFi-equipped Macs
|
||||
- Note with 14.4: Auto-Join may not work until you forget and rejoin the network
|
||||
- Increment binaries:
|
||||
- OpenCorePkg 0.9.7 - release
|
||||
|
||||
## 1.3.0
|
||||
- Resolve mismatched `CFBundleExecutable` and binary name for kexts.
|
||||
- Resolves ProperTree binary detection (Thanks @CorpNewt).
|
||||
- Applicable extensions:
|
||||
- corecrypto_T1.kext
|
||||
- corecaptureElCap.kext
|
||||
- IO80211ElCap.kext
|
||||
- Resolve 3802-GPU support for macOS 14.2 Beta 2 and newer.
|
||||
- Applicable GPUs:
|
||||
- Intel Ivy Bridge and Haswell iGPUs
|
||||
- Nvidia Kepler dGPUs
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.4.6 - release
|
||||
|
||||
## 1.2.1
|
||||
- Resolve `TeraScale 2 Acceleration` checkbox in Settings not being saved
|
||||
- Thanks @rtd1250
|
||||
- Resolve Auto Patcher failing to launch after updating macOS
|
||||
- Regression from 1.2.0
|
||||
|
||||
## 1.2.0
|
||||
- Resolve application not existing if user dismisses an update instead of installing
|
||||
- Resolve lldb crashes on extracted binaries
|
||||
- Remove MH_DYLIB_IN_CACHE flag from binaries extracted with DSCE
|
||||
- Add support for detecting T1 Security Chips in DFU mode
|
||||
- Resolve macOS 14.2 coreauthd crashes on T1 Macs
|
||||
- Resolve missing NFC firmware on T1 Macs
|
||||
- Update non-Metal Binaries for macOS Sonoma:
|
||||
- Resolve Photos app crash
|
||||
- Resolve loginwindow crashes
|
||||
- Workaround tile window popup freezing apps by disabling the feature
|
||||
- Workaround monochrome desktop widgets rendering issues by enforcing full color (can be disabled in OCLP settings)
|
||||
- Add new arguments:
|
||||
- `--cache_os`: Cache necessary patcher files for OS to be installed (ex. KDKs)
|
||||
- `--prepare_for_update`: Clean up patcher files for OS to be installed (ex. /Library/Extensions)
|
||||
- Add new Launch Daemons for handling macOS updates:
|
||||
- `macos-update.plist`:
|
||||
- Resolves KDKless Macs failing to boot after updating from 14.0 to 14.x
|
||||
- Adds support for KDK caching for OS to be installed
|
||||
- Invoked when update is staged
|
||||
- `/Library/LaunchDaemons/com.dortania.opencore-legacy-patcher.macos-update.plist`
|
||||
- `os-caching.plist`
|
||||
- Resolves unsupported/old KDKs from being used post-update
|
||||
- Invoked when update is downloading
|
||||
- `/Library/LaunchDaemons/com.dortania.opencore-legacy-patcher.os-caching.plist`
|
||||
- Load UI icons from local path
|
||||
- Resolves macOS downloader crash on slower machines
|
||||
- Resolve iMac18,2 internal 4K display support
|
||||
- Remove News Widget removal from Control Centre
|
||||
- News Widget no longer crashes on 3802-based GPUs
|
||||
- Resolve i210 NIC support for macOS Sonoma
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.4.5 - release
|
||||
- OpenCorePkg 0.9.6 - release
|
||||
|
||||
## 1.1.0
|
||||
- Resolve rendering issues on Intel Broadwell iGPUs
|
||||
- Update non-Metal Binaries for macOS Sonoma:
|
||||
- Resolve unresponsive Weather app
|
||||
- Resolve full screen menubar covering the app toolbar
|
||||
- Resolve unfocused password windows
|
||||
- Resolve USB 1.1 kernel panics on macOS 14.1
|
||||
- Resolve PCIe FaceTime camera support on macOS 14.1
|
||||
- Resolve T1 Security Chip support on macOS 14
|
||||
- Applicable for MacBookPro13,2, MacBookPro13,3, MacBookPro14,2, MacBookPro14,3
|
||||
- Add support for stand alone OpenCore Vaulting without Xcode Command Line Tools (Jazzzny)
|
||||
- Re-allow NVMeFix for macOS 14
|
||||
- Remove `-lilubetaall` argument for machines without AppleALC
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.4.2 - release
|
||||
- AirportBrcmFixup 2.1.8 - release
|
||||
- BlueToolFixup 2.6.8 - release
|
||||
- RestrictEvents 1.1.3 - release
|
||||
- AMFIPass 1.4.0 - release
|
||||
|
||||
## 1.0.1
|
||||
- Resolve rendering issues on Intel Ivy Bridge iGPUs
|
||||
- Update non-Metal Binaries for macOS Sonoma:
|
||||
- Resolve unresponsive Catalyst buttons
|
||||
- Resolve window unfocusing issues
|
||||
- Resolve menu bar fonts not changing color automatically with Beta Menu Bar enabled
|
||||
- Improve Lock Screen clock transparency
|
||||
- Prevent random WiFiAgent crashes
|
||||
- Add error handling for corrupted patcher settings
|
||||
- Remove CoreImage patch for 3802 GPUs on Ventura
|
||||
- Avoid listing PCIe FaceTime camera patch on pre-Sonoma OSes
|
||||
- Only cosmetic in Root Patching UI, however it has been removed to avoid confusion
|
||||
|
||||
## 1.0.0
|
||||
- Resolve BCM2046 and BCM2070 support on macOS 13.3 and newer
|
||||
- Workaround 13.3+ Kernel Panic on AMD GCN GPUs playing DRM content
|
||||
- Add new macOS Installer download menu (Jazzzny)
|
||||
- Refresh download UI (Jazzzny)
|
||||
- Add support for Universal 2 distribution (x86_64 and ARM64)
|
||||
- Drops Rosetta requirement on Apple Silicon Macs
|
||||
- Note building from source will require Python 3.11 or newer and up-to-date Python modules
|
||||
- Update font handling code, fixing font issues on Yosemite and El Capitan
|
||||
- Resolve incorrect RELEASE usage of OpenCore binaries when DEBUG enabled
|
||||
- Add RenderBox.framework patch for 3802-based Intel GPUs on macOS 13.3 and newer
|
||||
- Works around Weather and Widget freezing
|
||||
- Applicable for Intel Ivy Bridge and Haswell iGPUs
|
||||
- Add macOS Sonoma support to PatcherSupportPkg validation in CI
|
||||
- Implement basic support for macOS Sonoma:
|
||||
- Supports same range of hardware as Ventura, in addition to:
|
||||
- iMac18,x
|
||||
- MacBook10,1
|
||||
- MacBookPro14,x
|
||||
- [T1 chip currently unsupported in Sonoma](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1103)
|
||||
- Resolved issues:
|
||||
- Graphics Acceleration support for 3802 and non-Metal GPUs
|
||||
- UI corruption on 31001 GPUs
|
||||
- Wireless Networking for BCM94360, 4360, 4350, 4331 and 43224
|
||||
- USB ethernet support for adapters based on ECM protocol (ex. Realtek)
|
||||
- dGPU support for MacBookPro14,3
|
||||
- S1X/S3X NVMe Drive Support
|
||||
- PCIe-based FaceTime Camera support
|
||||
- Bluetooth support by switching to dynamic VMM spoofing
|
||||
- Increment Binaries:
|
||||
- OpenCorePkg 0.9.3 - release
|
||||
- Lilu 1.6.7 - release
|
||||
- WhateverGreen 1.6.6 - release
|
||||
- RestrictEvents 1.1.3 - (rolling - 4f233dd)
|
||||
- FeatureUnlock 1.1.5 - release
|
||||
- DebugEnhancer 1.0.8 - release
|
||||
- CPUFriend 1.2.7 - release
|
||||
- BlueToolFixup 2.6.8 - rolling (2305aaa)
|
||||
- CryptexFixup 1.0.2 - release
|
||||
- NVMeFix 1.1.1 - release
|
||||
- PatcherSupportPkg 1.3.2 - release
|
||||
- Build Server Changes:
|
||||
- Upgrade Python backend to 3.11.5
|
||||
- Upgrade Python modules:
|
||||
- requests - 2.31.0
|
||||
- pyobjc - 9.2
|
||||
- wxpython - 4.2.1
|
||||
- pyinstaller - 5.13.2
|
||||
- packaging - 23.1
|
||||
|
||||
## 0.6.8
|
||||
- Update non-Metal Binaries:
|
||||
- Improve experimental Menubar implementation stability
|
||||
- Implement reduce transparency Menubar
|
||||
- Resolve Color Profile support and Black Box rendering issues on HD 3000 Macs
|
||||
- Drops ColorSync downgrade configuration option
|
||||
- Resolves macOS 13.5 booting on HD 3000 Macs
|
||||
- Resolve app not updating in `/Applications` after an update
|
||||
- Work-around users manually copying app to `/Applications` instead of allowing Root Volume Patcher to create a proper alias
|
||||
- Add configuration for mediaanalysisd usage
|
||||
- For systems that are the primary iCloud Photo Library host, mediaanalysisd may be unstable on large amounts of unprocessed faces
|
||||
- Applicable to 3802-based GPUs (ie. Intel Ivy Bridge and Haswell iGPUs, Nvidia Kepler dGPUs)
|
||||
- Remove MacBook4,1 references
|
||||
- Machine was never properly supported by OCLP
|
||||
- Restore support for Aquantia Aqtion 10GBe Ethernet for Pre-VT-d systems on 12.3 and newer
|
||||
- i.e. MacPro5,1 with AQC107 expansion card running macOS Ventura/Monterey 12.6.x
|
||||
- Thanks [@jazzzny](https://github.com/jazzzny)
|
||||
- Resolve AMD Vega support on pre-AVX2 Macs in macOS Ventura
|
||||
- Originally caused by regression from 0.6.2
|
||||
- Disable non-Metal's Menubar 2 configuration
|
||||
- Can be manually re-enabled, however application will try to disable to prevent issues
|
||||
- Remove AppleGVA downgrade on Intel Skylake iGPUs
|
||||
- Implement AMFIPass system
|
||||
- Removes need for disabling Library Validation and AMFI outright on all applicable systems
|
||||
- Backend Changes:
|
||||
- device_probe.py:
|
||||
- Add USB device parsing via `IOUSBDevice` class
|
||||
- Streamline Bluetooth device detection
|
||||
- Add Probing for Top Case hardware (Jazzzny)
|
||||
- Improves handling for altered hardware scenarios (i.e. MacBookPro4,1 with MacBookPro3,1 topcase)
|
||||
- utilities.py:
|
||||
- Fix indexing error on Device Paths (thx [@Ausdauersportler](https://github.com/Ausdauersportler))
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.2.2 - release
|
||||
|
||||
## 0.6.7
|
||||
- Resolve partition buttons overlapping in Install OpenCore UI
|
||||
- ex. "EFI" and additional FAT32 partitions on a single drive
|
||||
- Re-enable mediaanalysisd on Ventura
|
||||
- Allows for Live Text support on systems with 3802 GPUs
|
||||
- ie. Intel Ivy Bridge and Haswell, Nvidia Kepler
|
||||
- Previously disabled due to high instability in Photos with Face Scanning, now resolved
|
||||
- Work-around crashing after patching with MenuBar2 implementation enabled
|
||||
- Setting must be re-enabled after patching
|
||||
- Update non-Metal Binaries:
|
||||
- Resolve window placement defaulting past top of screen for some apps
|
||||
- ex. OpenCore-Patcher.app during root patching
|
||||
- Resolve indeterminate progress bars not rendering with wxWidgets in Monterey and later
|
||||
- ex. OpenCore-Patcher.app
|
||||
- UI changes:
|
||||
- Add "Show Log File" button to menubar
|
||||
- Avoid listing unsupported installer to download by default
|
||||
- ex. macOS 14 InstallAssistant.pkg
|
||||
- Resolve crash when fetching remote macOS installers offline
|
||||
- Avoid displaying root patches on unsupported macOS versions
|
||||
- ex. macOS 14
|
||||
- Backend changes:
|
||||
- Call `setpgrp()` to prevent app from being killed if parent process is killed (ie. LaunchAgents)
|
||||
- Rework logging handler:
|
||||
- Implement formatted logging
|
||||
- Allowing easier debugging
|
||||
- Implement per-version, per-run file logging
|
||||
- ex. OpenCore-Patcher (0.6.7) (2021-12-31-12-34-56-666903).log
|
||||
- Keep only 10 latest log files
|
||||
- Reveal log file in Finder on main thread crash
|
||||
- Avoid writing username to log file
|
||||
- Resolve SharedSupport.dmg pathing error during macOS Installer Verification
|
||||
- Applicable to systems with 2 (or more) USB Installers with the same name plugged in
|
||||
- Resolve payloads path being mis-routed during CLI calls
|
||||
- Add UI when fetching root patches for host
|
||||
- Remove progress bar work-around for non-Metal in Monterey and later
|
||||
- Requires host to have been patched with PatcherSupportPkg 1.1.2 or newer
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.1.2 - release
|
||||
|
||||
## 0.6.6
|
||||
- Implement option to disable ColorSync downgrade on HD 3000 Macs
|
||||
- Allows for Display Profiles support on some units
|
||||
- Note: black box rendering issues will likely appear
|
||||
- Thanks [@jazzzny](https://github.com/Jazzzny)
|
||||
- Rename payloads.dmg volume name to "OpenCore Patcher Resources (Base)"
|
||||
- Allows for better identification when mounted (ex. Disk Utility while app is running)
|
||||
- Implement DMG-based PatcherSupportPkg system
|
||||
- Reduces both app size and root patching time
|
||||
- Resolve incorrect remote KDK matching for macOS betas
|
||||
- ex. Beta 4 KDK being recommended for Beta 3 install
|
||||
- Resolve low power mode on MacPro6,1
|
||||
- Credit to CaseyJ's [PCI Bus Enumeration Patch](https://github.com/AMD-OSX/AMD_Vanilla/pull/196)
|
||||
- Resolve PCI eject menu appearing on unsupported hardware
|
||||
- Resolve kernel panic on wake for AMD TeraScale 1 and Nvidia Tesla 8000 series GPUs
|
||||
- Resolve loss of Ethernet after wake on MacPro3,1 in Ventura
|
||||
- Resolve graphics corruption on wake for TeraScale 1
|
||||
- Patch currently limited to Ventura and newer
|
||||
- Restore Function Keys on MacBook5,2 and MacBook4,1
|
||||
- Implementation by [@jazzzny](https://github.com/Jazzzny)
|
||||
- Update non-Metal Binaries:
|
||||
- Resolves cryptexd and sshd crashes
|
||||
- Resolves screen recording regression
|
||||
- Resolves Photo Booth on macOS Monterey and later
|
||||
- May require tccplus for permissions
|
||||
- Resolve Application alias not being created with AutoPatcher
|
||||
- Backend changes:
|
||||
- Rename OCLP-Helper to OpenCore-Patcher
|
||||
- Allows for better identification when displaying prompts
|
||||
- Reimplement wxPython GUI into modularized system:
|
||||
- Allows for easier maintenance and future expansion
|
||||
- Changes include:
|
||||
- Reworked settings UI
|
||||
- Unified download UI with time remaining
|
||||
- Implement in-app update system
|
||||
- Guides users to update OpenCore and Root Patches once update's installed
|
||||
- Expand app update checks to include nightly users
|
||||
- ex. 0.6.6 nightly -> 0.6.6 release
|
||||
- Implement macOS installer verification after flashing
|
||||
- Implement proper UI call backs on long processes
|
||||
- ex. Root patching
|
||||
- Implement default selections for disks and installers
|
||||
- Set about and quit items
|
||||
- Utilize `py-applescript` for authorization prompts
|
||||
- Avoids displaying prompts with `osascript` in the title
|
||||
- Due to limitations, only used for installer creation and OpenCore installation
|
||||
- Resolve exception handler not logging to file
|
||||
- Display raised exceptions from main thread to users
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 1.1.0 - release
|
||||
- OpenCorePkg 0.9.2 - release
|
||||
- Lilu 1.6.6 - rolling (d8f3782)
|
||||
- RestrictEvents 1.1.1 - release
|
||||
- FeatureUnlock 1.1.4 - release
|
||||
- BlueToolFixup 2.6.6 - release
|
||||
|
||||
## 0.6.5
|
||||
- Update 3802 Patchset Binaries:
|
||||
- Resolves additional 3rd party app crashes on Metal with macOS 13.3+
|
||||
- ex: PowerPoint's "Presentation Mode"
|
||||
- Update non-Metal Binaries:
|
||||
- Resolves Safari 16.4 frozen canvas rendering
|
||||
- ex: Google Docs
|
||||
- Allow for coexistence of USB 3.0 controllers and USB 1.1 patches on macOS 13+
|
||||
- Restores USB 3.0 expansion card support on USB 1.1 machines such as MacPro5,1
|
||||
- Resolve OpenCL rendering on Nvidia Web Drivers
|
||||
- thanks [@jazzzny](https://github.com/Jazzzny)
|
||||
- Resolve UI unable to download macOS installers on unknown models
|
||||
- ex. M2 Macs and Hackintoshes
|
||||
- Implement minimum OS check for installer creation
|
||||
- Prevents vague errors when creating Ventura installers on Yosemite
|
||||
- Resolve WindowServer crashing with Rapid Security Response (RSR) installation
|
||||
- Primarily applicable for Haswell iGPUs on 13.3.1 (a)
|
||||
- Update legacy Wireless binaries
|
||||
- Resolve wifi crashing on 13.4 with BCM94322, BCM943224 and Atheros chipsets
|
||||
- Backend changes:
|
||||
- macos_installer_handler.py:
|
||||
- Expand OS support for IA parsing in SUCatalog
|
||||
- gui_main.py:
|
||||
- Fix spacing regression introduced with `.AppleSystemUIFont` implementation
|
||||
- Increment Binaries:
|
||||
- PatcherSupportPkg 0.9.7 - release
|
||||
- Build Server Changes:
|
||||
- Upgrade CI Host to macOS Monterey
|
||||
- Upgrade Xcode to 14.2
|
||||
- Switch from `altool` to `notarytool` for notarization
|
||||
|
||||
## 0.6.4
|
||||
- Backend changes:
|
||||
- Implement new analytics_handler.py module
|
||||
- Adds support for anonymous analytics including host info (and crash reports in the future)
|
||||
- Can be disabled via GUI or `defaults write com.dortania.opencore-legacy-patcher DisableCrashAndAnalyticsReporting -bool true`
|
||||
- Resolve Safari rendering error on Ivy Bridge in macOS 13.3+
|
||||
- Increment Binaries:
|
||||
- RestrictEvents 1.1.1 - rolling (495f4d5)
|
||||
|
||||
## 0.6.3
|
||||
- Update non-Metal Binaries:
|
||||
- Resolves Safari 16.4 rendering issue
|
||||
|
||||
13
LICENSE.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Copyright (c) 2020-2024 Dhinak G, Mykola Grymalyuk, and individual contributors.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
3. All advertising materials mentioning features or use of this software must display the following acknowledgement:
|
||||
This product includes software developed by Dortania and OpenCore Legacy Patcher contributors.
|
||||
4. Neither the name of OpenCore Legacy Patcher, nor the names of Dortania, Dhinak G, or Mykola Grymalyuk may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY DHINAK G AND MYKOLA GRYMALYUK "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DHINAK G NOR MYKOLA GRYMALYUK BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -1,6 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymalyuk
|
||||
from resources import main
|
||||
"""
|
||||
PyInstaller Entry Point
|
||||
"""
|
||||
|
||||
from opencore_legacy_patcher import main
|
||||
|
||||
if __name__ == '__main__':
|
||||
main.OpenCoreLegacyPatcher()
|
||||
main()
|
||||
@@ -1,15 +1,35 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
|
||||
import sys, os, time, subprocess
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from PyInstaller.building.api import PYZ, EXE, COLLECT
|
||||
from PyInstaller.building.osx import BUNDLE
|
||||
from PyInstaller.building.build_main import Analysis
|
||||
|
||||
sys.path.append(os.path.abspath(os.getcwd()))
|
||||
from resources import constants
|
||||
|
||||
from opencore_legacy_patcher import constants
|
||||
|
||||
block_cipher = None
|
||||
|
||||
datas = [
|
||||
('payloads.dmg', '.'),
|
||||
('Universal-Binaries.dmg', '.'),
|
||||
]
|
||||
|
||||
if Path("DortaniaInternalResources.dmg").exists():
|
||||
datas.append(('DortaniaInternalResources.dmg', '.'))
|
||||
|
||||
|
||||
a = Analysis(['OpenCore-Patcher-GUI.command'],
|
||||
pathex=[],
|
||||
binaries=[],
|
||||
datas=[('payloads.dmg', '.')],
|
||||
datas=datas,
|
||||
hiddenimports=[],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
@@ -19,8 +39,10 @@ a = Analysis(['OpenCore-Patcher-GUI.command'],
|
||||
win_private_assemblies=False,
|
||||
cipher=block_cipher,
|
||||
noarchive=False)
|
||||
pyz = PYZ(a.pure, a.zipped_data,
|
||||
cipher=block_cipher)
|
||||
|
||||
pyz = PYZ(a.pure,
|
||||
a.zipped_data,
|
||||
cipher=block_cipher)
|
||||
|
||||
exe = EXE(pyz,
|
||||
a.scripts,
|
||||
@@ -33,9 +55,10 @@ exe = EXE(pyz,
|
||||
upx=True,
|
||||
console=False,
|
||||
disable_windowed_traceback=False,
|
||||
target_arch=None,
|
||||
target_arch="universal2",
|
||||
codesign_identity=None,
|
||||
entitlements_file=None )
|
||||
entitlements_file=None)
|
||||
|
||||
coll = COLLECT(exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
@@ -44,17 +67,20 @@ coll = COLLECT(exe,
|
||||
upx=True,
|
||||
upx_exclude=[],
|
||||
name='OpenCore-Patcher')
|
||||
|
||||
app = BUNDLE(coll,
|
||||
name='OpenCore-Patcher.app',
|
||||
icon="payloads/OC-Patcher.icns",
|
||||
icon="payloads/Icon/AppIcons/OC-Patcher.icns",
|
||||
bundle_identifier="com.dortania.opencore-legacy-patcher",
|
||||
info_plist={
|
||||
"CFBundleName": "OpenCore Legacy Patcher",
|
||||
"CFBundleVersion": constants.Constants().patcher_version,
|
||||
"CFBundleShortVersionString": constants.Constants().patcher_version,
|
||||
"NSHumanReadableCopyright": constants.Constants().copyright_date,
|
||||
"LSMinimumSystemVersion": "10.10.0",
|
||||
"NSRequiresAquaSystemAppearance": False,
|
||||
"NSHighResolutionCapable": True,
|
||||
"Build Date": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
|
||||
"BuildMachineOSBuild": subprocess.run("sw_vers -buildVersion".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode().strip(),
|
||||
"BuildMachineOSBuild": subprocess.run(["/usr/bin/sw_vers", "-buildVersion"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode().strip(),
|
||||
"NSPrincipalClass": "NSApplication",
|
||||
})
|
||||
|
||||
25
PRIVACY.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Privacy Policy
|
||||
|
||||
OpenCore Legacy Patcher may collect pseudo-anonymized data about the host system and the OpenCore Legacy Patcher application. This data is used to improve the project and to help diagnose issues. The data collected is as follows:
|
||||
|
||||
* System's UUID as a SHA1 hash
|
||||
* This is used to identify the system and to prevent duplicate reports
|
||||
* Cannot be used to identify the system without the user providing the UUID
|
||||
* Application name and version
|
||||
* System's OS version
|
||||
* System's model name, GPUs present and firmware vendor
|
||||
* May include more hardware information in the future (ex. CPU, WiFi, etc)
|
||||
* General country code of system's reported region
|
||||
* ex. `US`, `CA`, etc
|
||||
|
||||
Identifiable data such as IP addresses, MAC addresses, serial numbers, etc. are not collected.
|
||||
|
||||
In the future, crash logs may also be collected to help with diagnosing issues.
|
||||
----------
|
||||
|
||||
Users who wish to opt-out can do so either via the application's preferences or via the following command:
|
||||
```
|
||||
defaults write com.dortania.opencore-legacy-patcher DisableCrashAndAnalyticsReporting -bool true
|
||||
```
|
||||
|
||||
To have your data removed, please contact us via our [Discord server](https://discord.gg/rqdPgH8xSN) and provide the UUID of your system.
|
||||
25
README.md
@@ -1,5 +1,5 @@
|
||||
<div align="center">
|
||||
<img src="images/OC-Patcher.png" alt="OpenCore Patcher Logo" width="256" />
|
||||
<img src="docs/images/OC-Patcher.png" alt="OpenCore Patcher Logo" width="256" />
|
||||
<h1>OpenCore Legacy Patcher</h1>
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,7 @@ Our project's main goal is to breathe new life into Macs no longer supported by
|
||||
|
||||
Noteworthy features of OpenCore Legacy Patcher:
|
||||
|
||||
* Support for macOS Big Sur, Monterey and Ventura
|
||||
* Support for macOS Big Sur, Monterey, Ventura, Sonoma and Sequoia
|
||||
* Native Over the Air (OTA) System Updates
|
||||
* Supports Penryn and newer Macs
|
||||
* Full support for WPA Wi-Fi and Personal Hotspot on BCM943224 and newer wireless chipsets
|
||||
@@ -32,7 +32,7 @@ Note: Only clean-installs and upgrades are supported. macOS Big Sur installs alr
|
||||
|
||||
* You can, however, reinstall macOS with this patcher and retain your original data
|
||||
|
||||
Note 2: Currently, OpenCore Legacy Patcher officially supports patching to run macOS Big Sur through Ventura installs. For older OSes, OpenCore may function; however, support is currently not provided from Dortania.
|
||||
Note 2: Currently, OpenCore Legacy Patcher officially supports patching to run macOS Big Sur through Sonoma installs. For older OSes, OpenCore may function; however, support is currently not provided from Dortania.
|
||||
|
||||
* For macOS Mojave and Catalina support, we recommend the use of [dosdude1's patchers](http://dosdude1.com)
|
||||
|
||||
@@ -91,6 +91,25 @@ To run the project from source, see here: [Build and run from source](./SOURCE.m
|
||||
* Aid with Nvidia Web Driver research and development
|
||||
* [joevt](https://github.com/joevt)
|
||||
* [FixPCIeLinkrate](https://github.com/joevt/joevtApps)
|
||||
* [Jazzzny](https://github.com/Jazzzny)
|
||||
* Research and various contributions to the project
|
||||
* UEFI Legacy XHCI research and development
|
||||
* NVIDIA OpenCL research and development
|
||||
* `MacBook5,2` research and development
|
||||
* LegacyKeyboardInjector
|
||||
* Pre-Ivy Bridge Aquantia Ethernet Patch
|
||||
* Non-Metal Photo Booth Patch for Monterey+
|
||||
* GUI and Backend Development
|
||||
* Updater UI
|
||||
* macOS Downloader UI
|
||||
* Downloader UI
|
||||
* USB Top Case probing
|
||||
* Developer root patching
|
||||
* Vaulting implementation
|
||||
* macOS 15 3802 Helios Research
|
||||
* UEFI bootx64.efi research
|
||||
* universal2 build research
|
||||
* Various documentation contributions
|
||||
* Amazing users who've graciously donate hardware:
|
||||
* [JohnD](https://forums.macrumors.com/members/johnd.53633/) - 2013 Mac Pro
|
||||
* [SpiGAndromeda](https://github.com/SpiGAndromeda) - AMD Vega 64
|
||||
|
||||
20
SOURCE.md
@@ -2,13 +2,13 @@
|
||||
|
||||
OpenCore Legacy Patcher at its core is a Python-based GUI/CLI-based application. In turn, to run the project from source, you simply need to invoke the OpenCore-Patcher-GUI.command file via Python.
|
||||
|
||||
For developers wishing to validate mainline changes, you may use these nightly links:
|
||||
For developers wishing to validate mainline changes, you may use this link: [GUI (Graphical Based App)](https://nightly.link/dortania/OpenCore-Legacy-Patcher/workflows/build-app-wxpython/main/OpenCore-Patcher.pkg.zip)
|
||||
|
||||
* [GUI (Graphical Based App)](https://nightly.link/dortania/OpenCore-Legacy-Patcher/workflows/build-app-wxpython/main/OpenCore-Patcher.app%20%28GUI%29.zip)
|
||||
* **Warning**: Nightly builds (untagged builds built from the latest commit) are actively developed OpenCore Legacy Patcher builds. These builds have not been tested, are not guaranteed to work, and are not guaranteed to be safe. Do not use nightlies without a good reason to do so, and do not use them on your main machine. Additionally, these binaries should not be used without first consulting the [CHANGELOG](./CHANGELOG.md).
|
||||
|
||||
**Warning**: These binaries should not be used without first consulting the [CHANGELOG](./CHANGELOG.md). Do not distribute these links in forums, please link to this document instead.
|
||||
|
||||
* Users running new builds of the project without understanding what has changed are at a higher risk of bricking their installation as they do not read any warnings provided in the CHANGELOG. We wish to minimize these situations as much as possible.
|
||||
**Do not share _any_ links to these binaries** in forums; please link to **this document only**.
|
||||
* Additionally, do not reupload these binaries or download binaries from other sites. Using binaries from untrusted sources is a security issue, as they may have been tampered with.
|
||||
* Users running new builds of the project without understanding what has changed and the implications of installing software under active development are at a higher risk of bricking their installation as they do not read any warnings provided in the CHANGELOG. We wish to minimize these situations as much as possible.
|
||||
|
||||
## Getting Started
|
||||
|
||||
@@ -32,7 +32,7 @@ pip3 install -r requirements.txt
|
||||
If you have any installation errors, see the following troubleshooting options:
|
||||
|
||||
* Use Python 3.10
|
||||
* Our build server currently uses Python 3.10 for generating binaries used in releases
|
||||
* Our build server currently uses Python 3.10 for generating binaries used in releases
|
||||
* Use .whl snapshots for installing additional dependencies
|
||||
|
||||
## Running OpenCore Legacy Patcher
|
||||
@@ -57,19 +57,13 @@ Pass `-h` or `--help` for more information on supported CLI arguments.
|
||||
|
||||
The main goal of generating prebuilt binaries is to strip the requirement of a local Python installation for users. For developers, there's very little benefit besides enabling dark mode support in the GUI. For development, simply use the OpenCore-Patcher-GUI.command file with a Python 3 installation.
|
||||
|
||||
* Note that due to PyInstaller's linking mechanism, binaries generated on Catalina and newer are not compatible with High Sierra and older
|
||||
* To ensure the best compatibility, generate binaries on macOS Mojave. These binaries will be compatible with macOS 10.9 to macOS 12.
|
||||
* Currently our build system is a [Macmini8,1 provided by MacStadium](https://www.macstadium.com/opensource) running macOS Mojave (10.14.6).
|
||||
|
||||
```sh
|
||||
# Install PyInstaller
|
||||
pip3 install pyinstaller
|
||||
# Move into project directory
|
||||
cd ~/Developer/OpenCore-Legacy-Patcher/
|
||||
# Create the pyinstaller based Application
|
||||
# Optional Arguments
|
||||
# '--reset_binaries': Redownload and generate support files
|
||||
python3 Build-Binary.command
|
||||
python3 Build-Project.command
|
||||
# Open build folder
|
||||
open ./dist/
|
||||
```
|
||||
|
||||
176
ci_tooling/build_modules/application.py
Normal file
@@ -0,0 +1,176 @@
|
||||
import sys
|
||||
import time
|
||||
import plistlib
|
||||
import subprocess
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from opencore_legacy_patcher.volume import generate_copy_arguments
|
||||
from opencore_legacy_patcher.support import subprocess_wrapper
|
||||
|
||||
|
||||
class GenerateApplication:
|
||||
"""
|
||||
Generate OpenCore-Patcher.app
|
||||
"""
|
||||
|
||||
def __init__(self, reset_pyinstaller_cache: bool = False, git_branch: str = None, git_commit_url: str = None, git_commit_date: str = None, analytics_key: str = None, analytics_endpoint: str = None) -> None:
|
||||
"""
|
||||
Initialize
|
||||
"""
|
||||
self._pyinstaller = [sys.executable, "-m", "PyInstaller"]
|
||||
self._application_output = Path("./dist/OpenCore-Patcher.app")
|
||||
|
||||
self._reset_pyinstaller_cache = reset_pyinstaller_cache
|
||||
|
||||
self._git_branch = git_branch
|
||||
self._git_commit_url = git_commit_url
|
||||
self._git_commit_date = git_commit_date
|
||||
|
||||
self._analytics_key = analytics_key
|
||||
self._analytics_endpoint = analytics_endpoint
|
||||
|
||||
|
||||
def _generate_application(self) -> None:
|
||||
"""
|
||||
Generate PyInstaller Application
|
||||
"""
|
||||
if self._application_output.exists():
|
||||
subprocess_wrapper.run_and_verify(["/bin/rm", "-rf", self._application_output], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
|
||||
print("Generating OpenCore-Patcher.app")
|
||||
_args = self._pyinstaller + ["./OpenCore-Patcher-GUI.spec", "--noconfirm"]
|
||||
if self._reset_pyinstaller_cache:
|
||||
_args.append("--clean")
|
||||
|
||||
subprocess_wrapper.run_and_verify(_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
|
||||
|
||||
def _embed_analytics_key(self) -> None:
|
||||
"""
|
||||
Embed analytics key
|
||||
"""
|
||||
_file = Path("./opencore_legacy_patcher/support/analytics_handler.py")
|
||||
|
||||
if not all([self._analytics_key, self._analytics_endpoint]):
|
||||
print("Analytics key or endpoint not provided, skipping embedding")
|
||||
return
|
||||
|
||||
print("Embedding analytics data")
|
||||
if not Path(_file).exists():
|
||||
raise FileNotFoundError("analytics_handler.py not found")
|
||||
|
||||
lines = []
|
||||
with open(_file, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
if line.startswith("SITE_KEY: str = "):
|
||||
lines[i] = f"SITE_KEY: str = \"{self._analytics_key}\"\n"
|
||||
elif line.startswith("ANALYTICS_SERVER: str = "):
|
||||
lines[i] = f"ANALYTICS_SERVER: str = \"{self._analytics_endpoint}\"\n"
|
||||
|
||||
with open(_file, "w") as f:
|
||||
f.writelines(lines)
|
||||
|
||||
|
||||
def _remove_analytics_key(self) -> None:
|
||||
"""
|
||||
Remove analytics key
|
||||
"""
|
||||
_file = Path("./opencore_legacy_patcher/support/analytics_handler.py")
|
||||
|
||||
if not all([self._analytics_key, self._analytics_endpoint]):
|
||||
return
|
||||
|
||||
print("Removing analytics data")
|
||||
if not _file.exists():
|
||||
raise FileNotFoundError("analytics_handler.py not found")
|
||||
|
||||
lines = []
|
||||
with open(_file, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
if line.startswith("SITE_KEY: str = "):
|
||||
lines[i] = "SITE_KEY: str = \"\"\n"
|
||||
elif line.startswith("ANALYTICS_SERVER: str = "):
|
||||
lines[i] = "ANALYTICS_SERVER: str = \"\"\n"
|
||||
|
||||
with open(_file, "w") as f:
|
||||
f.writelines(lines)
|
||||
|
||||
|
||||
def _patch_load_command(self):
|
||||
"""
|
||||
Patch LC_VERSION_MIN_MACOSX in Load Command to report 10.10
|
||||
|
||||
By default Pyinstaller will create binaries supporting 10.13+
|
||||
However this limitation is entirely arbitrary for our libraries
|
||||
and instead we're able to support 10.10 without issues.
|
||||
|
||||
To verify set version:
|
||||
otool -l ./dist/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
|
||||
|
||||
cmd LC_VERSION_MIN_MACOSX
|
||||
cmdsize 16
|
||||
version 10.13
|
||||
sdk 10.9
|
||||
"""
|
||||
_file = self._application_output / "Contents" / "MacOS" / "OpenCore-Patcher"
|
||||
|
||||
_find = b'\x00\x0D\x0A\x00' # 10.13 (0xA0D)
|
||||
_replace = b'\x00\x0A\x0A\x00' # 10.10 (0xA0A)
|
||||
|
||||
print("Patching LC_VERSION_MIN_MACOSX")
|
||||
with open(_file, "rb") as f:
|
||||
data = f.read()
|
||||
data = data.replace(_find, _replace, 1)
|
||||
|
||||
with open(_file, "wb") as f:
|
||||
f.write(data)
|
||||
|
||||
|
||||
def _embed_git_data(self) -> None:
|
||||
"""
|
||||
Embed git data
|
||||
"""
|
||||
_file = self._application_output / "Contents" / "Info.plist"
|
||||
|
||||
_git_branch = self._git_branch or "Built from source"
|
||||
_git_commit = self._git_commit_url or ""
|
||||
_git_commit_date = self._git_commit_date or time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
|
||||
|
||||
print("Embedding git data")
|
||||
_plist = plistlib.load(_file.open("rb"))
|
||||
_plist["Github"] = {
|
||||
"Branch": _git_branch,
|
||||
"Commit URL": _git_commit,
|
||||
"Commit Date": _git_commit_date
|
||||
}
|
||||
plistlib.dump(_plist, _file.open("wb"), sort_keys=True)
|
||||
|
||||
|
||||
def _embed_resources(self) -> None:
|
||||
"""
|
||||
Embed resources
|
||||
"""
|
||||
print("Embedding resources")
|
||||
for file in Path("payloads/Icon/AppIcons").glob("*.icns"):
|
||||
subprocess_wrapper.run_and_verify(
|
||||
generate_copy_arguments(str(file), self._application_output / "Contents" / "Resources/"),
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
|
||||
|
||||
def generate(self) -> None:
|
||||
"""
|
||||
Generate OpenCore-Patcher.app
|
||||
"""
|
||||
self._embed_analytics_key()
|
||||
self._generate_application()
|
||||
self._remove_analytics_key()
|
||||
|
||||
self._patch_load_command()
|
||||
self._embed_git_data()
|
||||
self._embed_resources()
|
||||
137
ci_tooling/build_modules/disk_images.py
Normal file
@@ -0,0 +1,137 @@
|
||||
"""
|
||||
disk_images.py: Fetch and generate disk images (Universal-Binaries.dmg, payloads.dmg)
|
||||
"""
|
||||
|
||||
import subprocess
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from opencore_legacy_patcher import constants
|
||||
from opencore_legacy_patcher.support import subprocess_wrapper
|
||||
|
||||
|
||||
|
||||
class GenerateDiskImages:
|
||||
|
||||
def __init__(self, reset_dmg_cache: bool = False) -> None:
|
||||
"""
|
||||
Initialize
|
||||
"""
|
||||
self.reset_dmg_cache = reset_dmg_cache
|
||||
|
||||
|
||||
def _delete_extra_binaries(self):
|
||||
"""
|
||||
Delete extra binaries from payloads directory
|
||||
"""
|
||||
|
||||
whitelist_folders = [
|
||||
"ACPI",
|
||||
"Config",
|
||||
"Drivers",
|
||||
"Icon",
|
||||
"Kexts",
|
||||
"OpenCore",
|
||||
"Tools",
|
||||
"Launch Services",
|
||||
]
|
||||
|
||||
whitelist_files = []
|
||||
|
||||
print("Deleting extra binaries...")
|
||||
for file in Path("payloads").glob(pattern="*"):
|
||||
if file.is_dir():
|
||||
if file.name in whitelist_folders:
|
||||
continue
|
||||
print(f"- Deleting {file.name}")
|
||||
subprocess_wrapper.run_and_verify(["/bin/rm", "-rf", file])
|
||||
else:
|
||||
if file.name in whitelist_files:
|
||||
continue
|
||||
print(f"- Deleting {file.name}")
|
||||
subprocess_wrapper.run_and_verify(["/bin/rm", "-f", file])
|
||||
|
||||
|
||||
|
||||
def _generate_payloads_dmg(self):
|
||||
"""
|
||||
Generate disk image containing all payloads
|
||||
Disk image will be password protected due to issues with
|
||||
Apple's notarization system and inclusion of kernel extensions
|
||||
"""
|
||||
|
||||
if Path("./payloads.dmg").exists():
|
||||
if self.reset_dmg_cache is False:
|
||||
print("- payloads.dmg already exists, skipping creation")
|
||||
return
|
||||
|
||||
print("- Removing old payloads.dmg")
|
||||
subprocess_wrapper.run_and_verify(
|
||||
["/bin/rm", "-rf", "./payloads.dmg"],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
|
||||
print("Generating DMG...")
|
||||
subprocess_wrapper.run_and_verify([
|
||||
'/usr/bin/hdiutil', 'create', './payloads.dmg',
|
||||
'-megabytes', '32000', # Overlays can only be as large as the disk image allows
|
||||
'-format', 'UDZO', '-ov',
|
||||
'-volname', 'OpenCore Patcher Resources (Base)',
|
||||
'-fs', 'HFS+',
|
||||
'-layout', 'NONE',
|
||||
'-srcfolder', './payloads',
|
||||
'-passphrase', 'password', '-encryption'
|
||||
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
|
||||
print("DMG generation complete")
|
||||
|
||||
|
||||
def _download_resources(self):
|
||||
"""
|
||||
Download required dependencies
|
||||
"""
|
||||
|
||||
patcher_support_pkg_version = constants.Constants().patcher_support_pkg_version
|
||||
required_resources = [
|
||||
"Universal-Binaries.dmg"
|
||||
]
|
||||
|
||||
print("Downloading required resources...")
|
||||
for resource in required_resources:
|
||||
if Path(f"./{resource}").exists():
|
||||
if self.reset_dmg_cache is True:
|
||||
print(f" - Removing old {resource}")
|
||||
# Just to be safe
|
||||
assert resource, "Resource cannot be empty"
|
||||
assert resource not in ("/", "."), "Resource cannot be root"
|
||||
subprocess_wrapper.run_and_verify(
|
||||
["/bin/rm", "-rf", f"./{resource}"],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
else:
|
||||
print(f"- {resource} already exists, skipping download")
|
||||
continue
|
||||
|
||||
print(f"- Downloading {resource}...")
|
||||
|
||||
subprocess_wrapper.run_and_verify(
|
||||
[
|
||||
"/usr/bin/curl", "-LO",
|
||||
f"https://github.com/dortania/PatcherSupportPkg/releases/download/{patcher_support_pkg_version}/{resource}"
|
||||
],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
)
|
||||
|
||||
if not Path(f"./{resource}").exists():
|
||||
print(f"- {resource} not found")
|
||||
raise Exception(f"{resource} not found")
|
||||
|
||||
|
||||
def generate(self) -> None:
|
||||
"""
|
||||
Generate disk images
|
||||
"""
|
||||
|
||||
self._delete_extra_binaries()
|
||||
self._generate_payloads_dmg()
|
||||
self._download_resources()
|
||||
148
ci_tooling/build_modules/package.py
Normal file
@@ -0,0 +1,148 @@
|
||||
"""
|
||||
package.py: Generate packages (Installer, Uninstaller, AutoPkg-Assets)
|
||||
"""
|
||||
|
||||
import tempfile
|
||||
import macos_pkg_builder
|
||||
|
||||
from opencore_legacy_patcher import constants
|
||||
|
||||
from .package_scripts import GenerateScripts
|
||||
|
||||
|
||||
class GeneratePackage:
|
||||
"""
|
||||
Generate OpenCore-Patcher.pkg
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""
|
||||
Initialize
|
||||
"""
|
||||
self._files = {
|
||||
"./dist/OpenCore-Patcher.app": "/Library/Application Support/Dortania/OpenCore-Patcher.app",
|
||||
"./ci_tooling/privileged_helper_tool/com.dortania.opencore-legacy-patcher.privileged-helper": "/Library/PrivilegedHelperTools/com.dortania.opencore-legacy-patcher.privileged-helper",
|
||||
}
|
||||
self._autopkg_files = {
|
||||
"./payloads/Launch Services/com.dortania.opencore-legacy-patcher.auto-patch.plist": "/Library/LaunchAgents/com.dortania.opencore-legacy-patcher.auto-patch.plist",
|
||||
}
|
||||
self._autopkg_files.update(self._files)
|
||||
|
||||
|
||||
def _generate_installer_welcome(self) -> str:
|
||||
"""
|
||||
Generate Welcome message for installer PKG
|
||||
"""
|
||||
_welcome = ""
|
||||
|
||||
_welcome += "# Overview\n"
|
||||
_welcome += f"This package will install the OpenCore Legacy Patcher application (v{constants.Constants().patcher_version}) on your system."
|
||||
|
||||
_welcome += "\n\nAdditionally, a shortcut for OpenCore Legacy Patcher will be added in the '/Applications' folder."
|
||||
_welcome += "\n\nThis package will not 'Build and Install OpenCore' or install any 'Root Patches' on your machine. If required, you can run OpenCore Legacy Patcher to install any patches you may need."
|
||||
_welcome += f"\n\nFor more information on OpenCore Legacy Patcher usage, see our [documentation]({constants.Constants().guide_link}) and [GitHub repository]({constants.Constants().repo_link})."
|
||||
_welcome += "\n\n"
|
||||
|
||||
_welcome += "## Files Installed"
|
||||
_welcome += "\n\nInstallation of this package will add the following files to your system:"
|
||||
for key, value in self._files.items():
|
||||
_welcome += f"\n\n- `{value}`"
|
||||
|
||||
return _welcome
|
||||
|
||||
|
||||
def _generate_uninstaller_welcome(self) -> str:
|
||||
"""
|
||||
Generate Welcome message for uninstaller PKG
|
||||
"""
|
||||
_welcome = ""
|
||||
|
||||
_welcome += "# Application Uninstaller\n"
|
||||
_welcome += "This package will uninstall the OpenCore Legacy Patcher application and its Privileged Helper Tool from your system."
|
||||
_welcome += "\n\n"
|
||||
_welcome += "This will not remove any root patches or OpenCore configurations that you may have installed using OpenCore Legacy Patcher."
|
||||
_welcome += "\n\n"
|
||||
_welcome += f"For more information on OpenCore Legacy Patcher, see our [documentation]({constants.Constants().guide_link}) and [GitHub repository]({constants.Constants().repo_link})."
|
||||
|
||||
return _welcome
|
||||
|
||||
|
||||
def _generate_autopkg_welcome(self) -> str:
|
||||
"""
|
||||
Generate Welcome message for AutoPkg-Assets PKG
|
||||
"""
|
||||
_welcome = ""
|
||||
|
||||
_welcome += "# DO NOT RUN AUTOPKG-ASSETS MANUALLY!\n\n"
|
||||
_welcome += "## THIS CAN BREAK YOUR SYSTEM'S INSTALL!\n\n"
|
||||
_welcome += "This package should only ever be invoked by the Patcher itself, never downloaded or run by the user. Download the OpenCore-Patcher.pkg on the Github Repository.\n\n"
|
||||
_welcome += f"[OpenCore Legacy Patcher GitHub Release]({constants.Constants().repo_link})"
|
||||
|
||||
return _welcome
|
||||
|
||||
|
||||
def generate(self) -> None:
|
||||
"""
|
||||
Generate OpenCore-Patcher.pkg
|
||||
"""
|
||||
print("Generating OpenCore-Patcher-Uninstaller.pkg")
|
||||
_tmp_uninstall = tempfile.NamedTemporaryFile(delete=False)
|
||||
with open(_tmp_uninstall.name, "w") as f:
|
||||
f.write(GenerateScripts().uninstall())
|
||||
|
||||
assert macos_pkg_builder.Packages(
|
||||
pkg_output="./dist/OpenCore-Patcher-Uninstaller.pkg",
|
||||
pkg_bundle_id="com.dortania.opencore-legacy-patcher-uninstaller",
|
||||
pkg_version=constants.Constants().patcher_version,
|
||||
pkg_background="./ci_tooling/pkg_assets/PkgBackground-Uninstaller.png",
|
||||
pkg_preinstall_script=_tmp_uninstall.name,
|
||||
pkg_as_distribution=True,
|
||||
pkg_title="OpenCore Legacy Patcher Uninstaller",
|
||||
pkg_welcome=self._generate_uninstaller_welcome(),
|
||||
).build() is True
|
||||
|
||||
print("Generating OpenCore-Patcher.pkg")
|
||||
|
||||
_tmp_pkg_preinstall = tempfile.NamedTemporaryFile(delete=False)
|
||||
_tmp_pkg_postinstall = tempfile.NamedTemporaryFile(delete=False)
|
||||
with open(_tmp_pkg_preinstall.name, "w") as f:
|
||||
f.write(GenerateScripts().preinstall_pkg())
|
||||
with open(_tmp_pkg_postinstall.name, "w") as f:
|
||||
f.write(GenerateScripts().postinstall_pkg())
|
||||
|
||||
assert macos_pkg_builder.Packages(
|
||||
pkg_output="./dist/OpenCore-Patcher.pkg",
|
||||
pkg_bundle_id="com.dortania.opencore-legacy-patcher",
|
||||
pkg_version=constants.Constants().patcher_version,
|
||||
pkg_allow_relocation=False,
|
||||
pkg_as_distribution=True,
|
||||
pkg_background="./ci_tooling/pkg_assets/PkgBackground-Installer.png",
|
||||
pkg_preinstall_script=_tmp_pkg_preinstall.name,
|
||||
pkg_postinstall_script=_tmp_pkg_postinstall.name,
|
||||
pkg_file_structure=self._files,
|
||||
pkg_title="OpenCore Legacy Patcher",
|
||||
pkg_welcome=self._generate_installer_welcome(),
|
||||
).build() is True
|
||||
|
||||
print("Generating AutoPkg-Assets.pkg")
|
||||
|
||||
_tmp_auto_pkg_preinstall = tempfile.NamedTemporaryFile(delete=False)
|
||||
_tmp_auto_pkg_postinstall = tempfile.NamedTemporaryFile(delete=False)
|
||||
with open(_tmp_auto_pkg_preinstall.name, "w") as f:
|
||||
f.write(GenerateScripts().preinstall_autopkg())
|
||||
with open(_tmp_auto_pkg_postinstall.name, "w") as f:
|
||||
f.write(GenerateScripts().postinstall_autopkg())
|
||||
|
||||
assert macos_pkg_builder.Packages(
|
||||
pkg_output="./dist/AutoPkg-Assets.pkg",
|
||||
pkg_bundle_id="com.dortania.pkg.AutoPkg-Assets",
|
||||
pkg_version=constants.Constants().patcher_version,
|
||||
pkg_allow_relocation=False,
|
||||
pkg_as_distribution=True,
|
||||
pkg_background="./ci_tooling/pkg_assets/PkgBackground-AutoPkg.png",
|
||||
pkg_preinstall_script=_tmp_auto_pkg_preinstall.name,
|
||||
pkg_postinstall_script=_tmp_auto_pkg_postinstall.name,
|
||||
pkg_file_structure=self._autopkg_files,
|
||||
pkg_title="AutoPkg Assets",
|
||||
pkg_welcome=self._generate_autopkg_welcome(),
|
||||
).build() is True
|
||||
556
ci_tooling/build_modules/package_scripts.py
Normal file
@@ -0,0 +1,556 @@
|
||||
"""
|
||||
package_scripts.py: Generate pre/postinstall scripts for PKG and AutoPkg
|
||||
"""
|
||||
|
||||
|
||||
class ZSHFunctions:
|
||||
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
|
||||
|
||||
def generate_standard_pkg_parameters(self) -> str:
|
||||
"""
|
||||
ZSH variables for standard PackageKit parameters
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "# MARK: PackageKit Parameters\n"
|
||||
_script += "# " + "-" * 27 + "\n\n"
|
||||
|
||||
_script += "pathToScript=$0 # ex. /tmp/PKInstallSandbox.*/Scripts/*/preinstall\n"
|
||||
_script += "pathToPackage=$1 # ex. ~/Downloads/Installer.pkg\n"
|
||||
_script += "pathToTargetLocation=$2 # ex. '/', '/Applications', etc (depends on pkgbuild's '--install-location' argument)\n"
|
||||
_script += "pathToTargetVolume=$3 # ex. '/', '/Volumes/MyVolume', etc\n"
|
||||
_script += "pathToStartupDisk=$4 # ex. '/'\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_script_remove_file(self) -> str:
|
||||
"""
|
||||
ZSH function to remove files
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _removeFile() {\n"
|
||||
_script += " local file=$1\n\n"
|
||||
|
||||
_script += " if [[ ! -e $file ]]; then\n"
|
||||
_script += " # Check if file is a symbolic link\n"
|
||||
_script += " if [[ -L $file ]]; then\n"
|
||||
_script += " echo \"Removing symbolic link: $file\"\n"
|
||||
_script += " /bin/rm -f $file\n"
|
||||
_script += " fi\n"
|
||||
_script += " return\n"
|
||||
_script += " fi\n\n"
|
||||
|
||||
_script += " echo \"Removing file: $file\"\n\n"
|
||||
|
||||
_script += " # Check if file is a directory\n"
|
||||
_script += " if [[ -d $file ]]; then\n"
|
||||
_script += " /bin/rm -rf $file\n"
|
||||
_script += " else\n"
|
||||
_script += " /bin/rm -f $file\n"
|
||||
_script += " fi\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_script_create_parent_directory(self) -> str:
|
||||
"""
|
||||
ZSH function to create parent directory
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _createParentDirectory() {\n"
|
||||
_script += " local file=$1\n\n"
|
||||
|
||||
_script += " local parentDirectory=\"$(/usr/bin/dirname $file)\"\n\n"
|
||||
|
||||
_script += " # Check if parent directory exists\n"
|
||||
_script += " if [[ ! -d $parentDirectory ]]; then\n"
|
||||
_script += " echo \"Creating parent directory: $parentDirectory\"\n"
|
||||
_script += " /bin/mkdir -p $parentDirectory\n"
|
||||
_script += " fi\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_set_suid_bit(self) -> str:
|
||||
"""
|
||||
ZSH function to set SUID bit
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _setSUIDBit() {\n"
|
||||
_script += " local binaryPath=$1\n\n"
|
||||
|
||||
_script += " echo \"Setting SUID bit on: $binaryPath\"\n\n"
|
||||
|
||||
_script += " # Check if path is a directory\n"
|
||||
_script += " if [[ -d $binaryPath ]]; then\n"
|
||||
_script += " /bin/chmod -R +s $binaryPath\n"
|
||||
_script += " else\n"
|
||||
_script += " /bin/chmod +s $binaryPath\n"
|
||||
_script += " fi\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_create_alias(self) -> str:
|
||||
"""
|
||||
ZSH function to create alias
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _createAlias() {\n"
|
||||
_script += " local mainPath=$1\n"
|
||||
_script += " local aliasPath=$2\n\n"
|
||||
|
||||
_script += " # Check if alias path exists\n"
|
||||
_script += " if [[ -e $aliasPath ]]; then\n"
|
||||
_script += " # Check if alias path is a symbolic link\n"
|
||||
_script += " if [[ -L $aliasPath ]]; then\n"
|
||||
_script += " echo \"Removing old symbolic link: $aliasPath\"\n"
|
||||
_script += " /bin/rm -f $aliasPath\n"
|
||||
_script += " else\n"
|
||||
_script += " echo \"Removing old file: $aliasPath\"\n"
|
||||
_script += " /bin/rm -rf $aliasPath\n"
|
||||
_script += " fi\n"
|
||||
_script += " fi\n\n"
|
||||
|
||||
_script += " # Create symbolic link\n"
|
||||
_script += " echo \"Creating symbolic link: $aliasPath\"\n"
|
||||
_script += " /bin/ln -s $mainPath $aliasPath\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_start_patching(self) -> str:
|
||||
"""
|
||||
ZSH function to start patching
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _startPatching() {\n"
|
||||
_script += " local executable=$1\n"
|
||||
_script += " local logPath=$(_logFile)\n\n"
|
||||
|
||||
_script += " # Start patching\n"
|
||||
_script += " \"$executable\" \"--patch_sys_vol\" &> $logPath\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_log_file(self) -> str:
|
||||
"""
|
||||
ZSH function to generate log file
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _logFile() {\n"
|
||||
_script += " echo \"/Users/Shared/.OCLP-AutoPatcher-Log-$(/bin/date +\"%Y_%m_%d_%I_%M_%p\").txt\"\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_fix_settings_file_permission(self) -> str:
|
||||
"""
|
||||
ZSH function to fix settings file permission
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _fixSettingsFilePermission() {\n"
|
||||
_script += " local settingsPath=\"$pathToTargetVolume/Users/Shared/.com.dortania.opencore-legacy-patcher.plist\"\n\n"
|
||||
|
||||
_script += " if [[ -e $settingsPath ]]; then\n"
|
||||
_script += " echo \"Fixing settings file permissions: $settingsPath\"\n"
|
||||
_script += " /bin/chmod 666 $settingsPath\n"
|
||||
_script += " fi\n"
|
||||
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_reboot(self) -> str:
|
||||
"""
|
||||
ZSH function to reboot
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _reboot() {\n"
|
||||
_script += " /sbin/reboot\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_prewarm_gatekeeper(self) -> str:
|
||||
"""
|
||||
ZSH function to prewarm Gatekeeper
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _prewarmGatekeeper() {\n"
|
||||
_script += " local appPath=$1\n\n"
|
||||
|
||||
_script += " # Check if /usr/bin/gktool exists\n"
|
||||
_script += " if [[ ! -e /usr/bin/gktool ]]; then\n"
|
||||
_script += " echo \"Host doesn't support Gatekeeper prewarming, skipping...\"\n"
|
||||
_script += " return\n"
|
||||
_script += " fi\n\n"
|
||||
|
||||
_script += " echo \"Prewarming Gatekeeper for application: $appPath\"\n"
|
||||
_script += " /usr/bin/gktool scan $appPath\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_clean_launch_service(self) -> str:
|
||||
"""
|
||||
ZSH function to clean Launch Service
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _cleanLaunchService() {\n"
|
||||
_script += " local domain=\"com.dortania.opencore-legacy-patcher\"\n\n"
|
||||
|
||||
_script += " # Iterate over launch agents and daemons\n"
|
||||
_script += " for launchServiceVariant in \"$pathToTargetVolume/Library/LaunchAgents\" \"$pathToTargetVolume/Library/LaunchDaemons\"; do\n"
|
||||
_script += " # Check if directory exists\n"
|
||||
_script += " if [[ ! -d $launchServiceVariant ]]; then\n"
|
||||
_script += " continue\n"
|
||||
_script += " fi\n\n"
|
||||
|
||||
_script += " # Iterate over launch service files\n"
|
||||
_script += " for launchServiceFile in $(/bin/ls -1 $launchServiceVariant | /usr/bin/grep $domain); do\n"
|
||||
_script += " local launchServicePath=\"$launchServiceVariant/$launchServiceFile\"\n\n"
|
||||
|
||||
_script += " # Remove launch service file\n"
|
||||
_script += " _removeFile $launchServicePath\n"
|
||||
_script += " done\n"
|
||||
_script += " done\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_preinstall_main(self) -> str:
|
||||
"""
|
||||
ZSH function for preinstall's main
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _main() {\n"
|
||||
_script += " for file in $filesToRemove; do\n"
|
||||
_script += " _removeFile $pathToTargetVolume/$file\n"
|
||||
_script += " _createParentDirectory $pathToTargetVolume/$file\n"
|
||||
_script += " done\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_postinstall_main(self, is_autopkg: bool = False) -> str:
|
||||
"""
|
||||
ZSH function for postinstall's main
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _main() {\n"
|
||||
_script += " _setSUIDBit \"$pathToTargetVolume/$helperPath\"\n"
|
||||
_script += " _createAlias \"$pathToTargetVolume/$mainAppPath\" \"$pathToTargetVolume/$shimAppPath\"\n"
|
||||
_script += " _prewarmGatekeeper \"$pathToTargetVolume/$mainAppPath\"\n"
|
||||
if is_autopkg:
|
||||
_script += " _startPatching \"$pathToTargetVolume/$executablePath\"\n"
|
||||
_script += " _fixSettingsFilePermission\n"
|
||||
_script += " _reboot\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def generate_uninstall_main(self) -> str:
|
||||
"""
|
||||
ZSH function for uninstall's main
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += "function _main() {\n"
|
||||
_script += " _cleanLaunchService\n"
|
||||
_script += " for file in $filesToRemove; do\n"
|
||||
_script += " _removeFile $pathToTargetVolume/$file\n"
|
||||
_script += " done\n"
|
||||
_script += "}\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
class GenerateScripts:
|
||||
|
||||
def __init__(self):
|
||||
self.zsh_functions = ZSHFunctions()
|
||||
|
||||
self.files = [
|
||||
"Applications/OpenCore-Patcher.app",
|
||||
"Library/Application Support/Dortania/Update.plist",
|
||||
"Library/Application Support/Dortania/OpenCore-Patcher.app",
|
||||
"Library/PrivilegedHelperTools/com.dortania.opencore-legacy-patcher.privileged-helper"
|
||||
]
|
||||
|
||||
self.additional_auto_pkg_files = [
|
||||
"Library/LaunchAgents/com.dortania.opencore-legacy-patcher.auto-patch.plist"
|
||||
]
|
||||
|
||||
|
||||
def __generate_shebang(self) -> str:
|
||||
"""
|
||||
Standard shebang for ZSH
|
||||
"""
|
||||
return "#!/bin/zsh --no-rcs\n"
|
||||
|
||||
|
||||
def _generate_header_bar(self) -> str:
|
||||
"""
|
||||
# ------------------------------------------------------
|
||||
"""
|
||||
return "# " + "-" * 54 + "\n"
|
||||
|
||||
|
||||
def _generate_label_bar(self) -> str:
|
||||
"""
|
||||
# ------------------------------
|
||||
"""
|
||||
return "# " + "-" * 27 + "\n"
|
||||
|
||||
|
||||
def _generate_preinstall_script(self, is_autopkg: bool = False) -> str:
|
||||
"""
|
||||
Generate preinstall script for PKG
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += self.__generate_shebang()
|
||||
|
||||
_script += self._generate_header_bar()
|
||||
_script += f"# {'AutoPkg Assets' if is_autopkg else 'OpenCore Legacy Patcher'} Preinstall Script\n"
|
||||
_script += self._generate_header_bar()
|
||||
_script += "# Remove old files, and prepare directories.\n"
|
||||
_script += self._generate_header_bar()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += self.zsh_functions.generate_standard_pkg_parameters()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Variables\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_files = self.files
|
||||
if is_autopkg:
|
||||
_files += self.additional_auto_pkg_files
|
||||
|
||||
_script += f"filesToRemove=(\n"
|
||||
for _file in _files:
|
||||
_script += f" \"{_file}\"\n"
|
||||
|
||||
_script += ")\n"
|
||||
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Functions\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_script += self.zsh_functions.generate_script_remove_file()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_script_create_parent_directory()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_preinstall_main()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Main\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_script += "echo \"Starting preinstall script...\"\n"
|
||||
_script += "_main\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def _generate_postinstall_script(self, is_autopkg: bool = False) -> str:
|
||||
"""
|
||||
"""
|
||||
|
||||
_script = ""
|
||||
|
||||
_script += self.__generate_shebang()
|
||||
|
||||
_script += self._generate_header_bar()
|
||||
_script += f"# {'AutoPkg Assets' if is_autopkg else 'OpenCore Legacy Patcher'} Post Install Script\n"
|
||||
_script += self._generate_header_bar()
|
||||
if is_autopkg:
|
||||
_script += "# Set UID, create alias, start patching, and reboot.\n"
|
||||
else:
|
||||
_script += "# Set SUID bit on helper tool, and create app alias.\n"
|
||||
_script += self._generate_header_bar()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += self.zsh_functions.generate_standard_pkg_parameters()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Variables\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_script += "helperPath=\"Library/PrivilegedHelperTools/com.dortania.opencore-legacy-patcher.privileged-helper\"\n"
|
||||
_script += "mainAppPath=\"Library/Application Support/Dortania/OpenCore-Patcher.app\"\n"
|
||||
_script += "shimAppPath=\"Applications/OpenCore-Patcher.app\"\n"
|
||||
if is_autopkg:
|
||||
_script += "executablePath=\"$mainAppPath/Contents/MacOS/OpenCore-Patcher\"\n"
|
||||
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Functions\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_script += self.zsh_functions.generate_set_suid_bit()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_create_alias()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_prewarm_gatekeeper()
|
||||
_script += "\n"
|
||||
if is_autopkg:
|
||||
_script += self.zsh_functions.generate_start_patching()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_log_file()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_fix_settings_file_permission()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_reboot()
|
||||
_script += "\n"
|
||||
|
||||
_script += self.zsh_functions.generate_postinstall_main(is_autopkg)
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Main\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_script += "echo \"Starting postinstall script...\"\n"
|
||||
_script += "_main\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def _generate_uninstall_script(self) -> str:
|
||||
"""
|
||||
"""
|
||||
_script = ""
|
||||
|
||||
_script += self.__generate_shebang()
|
||||
|
||||
_script += self._generate_header_bar()
|
||||
_script += f"# OpenCore Legacy Patcher Uninstall Script\n"
|
||||
_script += self._generate_header_bar()
|
||||
_script += "# Remove OpenCore Legacy Patcher files and directories.\n"
|
||||
_script += self._generate_header_bar()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += self.zsh_functions.generate_standard_pkg_parameters()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Variables\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_files = self.files
|
||||
|
||||
_script += "filesToRemove=(\n"
|
||||
for _file in _files:
|
||||
_script += f" \"{_file}\"\n"
|
||||
|
||||
_script += ")\n"
|
||||
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Functions\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_script += self.zsh_functions.generate_script_remove_file()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_clean_launch_service()
|
||||
_script += "\n"
|
||||
_script += self.zsh_functions.generate_uninstall_main()
|
||||
_script += "\n\n"
|
||||
|
||||
_script += "# MARK: Main\n"
|
||||
_script += self._generate_label_bar()
|
||||
_script += "\n"
|
||||
|
||||
_script += "echo \"Starting uninstall script...\"\n"
|
||||
_script += "_main\n"
|
||||
|
||||
return _script
|
||||
|
||||
|
||||
def preinstall_pkg(self) -> str:
|
||||
"""
|
||||
Generate preinstall script for PKG
|
||||
"""
|
||||
return self._generate_preinstall_script()
|
||||
|
||||
|
||||
def preinstall_autopkg(self) -> str:
|
||||
"""
|
||||
Generate preinstall script for AutoPkg
|
||||
"""
|
||||
return self._generate_preinstall_script(is_autopkg=True)
|
||||
|
||||
|
||||
def postinstall_pkg(self) -> str:
|
||||
"""
|
||||
Generate postinstall script for PKG
|
||||
"""
|
||||
return self._generate_postinstall_script()
|
||||
|
||||
|
||||
def postinstall_autopkg(self) -> str:
|
||||
"""
|
||||
Generate postinstall script for AutoPkg
|
||||
"""
|
||||
return self._generate_postinstall_script(is_autopkg=True)
|
||||
|
||||
|
||||
def uninstall(self) -> str:
|
||||
"""
|
||||
Generate uninstall script
|
||||
"""
|
||||
return self._generate_uninstall_script()
|
||||
34
ci_tooling/build_modules/shim.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
shim.py: Generate Update Shim
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from opencore_legacy_patcher.volume import generate_copy_arguments
|
||||
from opencore_legacy_patcher.support import subprocess_wrapper
|
||||
|
||||
|
||||
class GenerateShim:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self._shim_path = "./ci_tooling/update_shim/OpenCore-Patcher.app"
|
||||
self._shim_pkg = f"{self._shim_path}/Contents/Resources/OpenCore-Patcher.pkg"
|
||||
|
||||
self._build_pkg = "./dist/OpenCore-Patcher.pkg"
|
||||
self._output_shim = "./dist/OpenCore-Patcher (Shim).app"
|
||||
|
||||
|
||||
def generate(self) -> None:
|
||||
"""
|
||||
Generate Update Shim
|
||||
"""
|
||||
print("Generating Update Shim")
|
||||
if Path(self._shim_pkg).exists():
|
||||
Path(self._shim_pkg).unlink()
|
||||
|
||||
subprocess_wrapper.run_and_verify(generate_copy_arguments(self._build_pkg, self._shim_pkg))
|
||||
|
||||
if Path(self._output_shim).exists():
|
||||
Path(self._output_shim).unlink()
|
||||
|
||||
subprocess_wrapper.run_and_verify(generate_copy_arguments(self._shim_path, self._output_shim))
|
||||
54
ci_tooling/build_modules/sign_notarize.py
Normal file
@@ -0,0 +1,54 @@
|
||||
"""
|
||||
sign_notarize.py: Sign and Notarize a file
|
||||
"""
|
||||
|
||||
import mac_signing_buddy
|
||||
import macos_pkg_builder
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import macos_pkg_builder.utilities.signing
|
||||
|
||||
|
||||
class SignAndNotarize:
|
||||
|
||||
def __init__(self, path: Path, signing_identity: str, notarization_apple_id: str, notarization_password: str, notarization_team_id: str, entitlements: str = None) -> None:
|
||||
"""
|
||||
Initialize
|
||||
"""
|
||||
self._path = path
|
||||
self._signing_identity = signing_identity
|
||||
self._notarization_apple_id = notarization_apple_id
|
||||
self._notarization_password = notarization_password
|
||||
self._notarization_team_id = notarization_team_id
|
||||
self._entitlements = entitlements
|
||||
|
||||
|
||||
def sign_and_notarize(self) -> None:
|
||||
"""
|
||||
Sign and Notarize
|
||||
"""
|
||||
if not all([self._signing_identity, self._notarization_apple_id, self._notarization_password, self._notarization_team_id]):
|
||||
print("Signing and Notarization details not provided, skipping")
|
||||
return
|
||||
|
||||
print(f"Signing {self._path.name}")
|
||||
if self._path.name.endswith(".pkg"):
|
||||
macos_pkg_builder.utilities.signing.SignPackage(
|
||||
identity=self._signing_identity,
|
||||
pkg=self._path,
|
||||
).sign()
|
||||
else:
|
||||
mac_signing_buddy.Sign(
|
||||
identity=self._signing_identity,
|
||||
file=self._path,
|
||||
**({"entitlements": self._entitlements} if self._entitlements else {}),
|
||||
).sign()
|
||||
|
||||
print(f"Notarizing {self._path.name}")
|
||||
mac_signing_buddy.Notarize(
|
||||
apple_id=self._notarization_apple_id,
|
||||
password=self._notarization_password,
|
||||
team_id=self._notarization_team_id,
|
||||
file=self._path,
|
||||
).sign()
|
||||
376
ci_tooling/installer_backups/macOS_Installer_Backup.command
Executable file
@@ -0,0 +1,376 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
--------------------------------
|
||||
macOS_Installer_Backup.command
|
||||
--------------------------------
|
||||
|
||||
Utility for grabbing macOS Installers from Apple's catalogs and AppleDB,
|
||||
and saving them to a local directory.
|
||||
|
||||
WARNING: Solely for internal usage, not intended for end-users.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import argparse
|
||||
import plistlib
|
||||
import subprocess
|
||||
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
# To allow easy importing of OpenCore Legacy Patcher's utilities
|
||||
sys.path.append(str(Path(__file__).parent.parent.parent))
|
||||
|
||||
from opencore_legacy_patcher.support import (
|
||||
macos_installer_handler,
|
||||
network_handler,
|
||||
integrity_verification,
|
||||
utilities,
|
||||
)
|
||||
from opencore_legacy_patcher.datasets import os_data
|
||||
|
||||
|
||||
_DEFAULT_PATH: str = "/Volumes/macOS Installers"
|
||||
|
||||
|
||||
class InstallerBackup:
|
||||
|
||||
def __init__(self,
|
||||
directory: Path = Path(_DEFAULT_PATH),
|
||||
supported_oses: list = [
|
||||
os_data.os_data.big_sur,
|
||||
os_data.os_data.monterey,
|
||||
os_data.os_data.ventura,
|
||||
os_data.os_data.sonoma,
|
||||
os_data.os_data.sequoia,
|
||||
],
|
||||
first_run: bool = False
|
||||
) -> None:
|
||||
|
||||
print(f"Starting macOS Installer Backup: {datetime.now()}")
|
||||
|
||||
self._directory = directory
|
||||
self._supported_oses = supported_oses
|
||||
|
||||
self._os_table = {
|
||||
os_data.os_data.big_sur: Path(self._directory, "11 Big Sur"),
|
||||
os_data.os_data.monterey: Path(self._directory, "12 Monterey"),
|
||||
os_data.os_data.ventura: Path(self._directory, "13 Ventura"),
|
||||
os_data.os_data.sonoma: Path(self._directory, "14 Sonoma"),
|
||||
os_data.os_data.sequoia: Path(self._directory, "15 Sequoia"),
|
||||
}
|
||||
|
||||
for os_version in self._supported_oses:
|
||||
if os_version not in self._os_table:
|
||||
raise ValueError(f"Unsupported OS version: {os_version}")
|
||||
|
||||
for dir in self._os_table.values():
|
||||
if not Path(dir).exists():
|
||||
if first_run is False:
|
||||
raise FileNotFoundError(f"Directory does not exist: {dir} (use --first-run to create)")
|
||||
Path(dir).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
self._main()
|
||||
|
||||
|
||||
def _download_installer(self, installer: dict) -> None:
|
||||
"""
|
||||
Download installer
|
||||
"""
|
||||
|
||||
installer_name = f"{installer['Version']} ({installer['Build']})"
|
||||
if Path(installer['Link']).suffix == ".pkg":
|
||||
installer_name += " InstallAssistant.pkg"
|
||||
else:
|
||||
installer_name += " Restore.ipsw"
|
||||
integrity_name = f"{installer_name}.integrityDataV1"
|
||||
print(f"Downloading {installer_name}")
|
||||
|
||||
# Check if integrity file available
|
||||
integrity = installer["integrity"]
|
||||
if integrity is not None:
|
||||
result = self._downloader(url=integrity, path=Path(self._os_table[installer['OS']], integrity_name), name=integrity_name)
|
||||
if result is False:
|
||||
return
|
||||
|
||||
# Download installer
|
||||
result = self._downloader(url=installer["Link"], path=Path(self._os_table[installer['OS']], installer_name), name=installer_name)
|
||||
if result is False:
|
||||
return
|
||||
|
||||
# Validate against chunklist
|
||||
if integrity is not None:
|
||||
result = self._validate_against_chunklist(installer_path=Path(self._os_table[installer['OS']], installer_name), chunklist=Path(self._os_table[installer['OS']], integrity_name))
|
||||
if result is False:
|
||||
return
|
||||
|
||||
|
||||
def _validate_against_chunklist(self, installer_path: str, chunklist: str) -> bool:
|
||||
"""
|
||||
Validate file against chunklist
|
||||
"""
|
||||
|
||||
name = Path(installer_path).name
|
||||
|
||||
if not Path(installer_path).exists():
|
||||
print("File does not exist")
|
||||
return False
|
||||
|
||||
if not Path(chunklist).exists():
|
||||
print("Chunklist does not exist")
|
||||
return False
|
||||
|
||||
chunk_obj = integrity_verification.ChunklistVerification(installer_path, chunklist)
|
||||
if not chunk_obj.chunks:
|
||||
print("Failed to generate chunklist dict")
|
||||
return False
|
||||
|
||||
print(f"Validating {name} against chunklist: {chunk_obj.total_chunks} chunks", end="\r")
|
||||
chunk_obj.validate()
|
||||
|
||||
while chunk_obj.status == integrity_verification.ChunklistStatus.IN_PROGRESS:
|
||||
print(f"Validating {name} against chunklist: chunk {chunk_obj.current_chunk} passed", end="\r")
|
||||
|
||||
if chunk_obj.status == integrity_verification.ChunklistStatus.FAILURE:
|
||||
print(chunk_obj.error_msg)
|
||||
print(f"Validating {name} against chunklist: chunk {chunk_obj.current_chunk} failed")
|
||||
for file in [installer_path, chunklist]:
|
||||
result = subprocess.run(["/bin/rm", "-f", file])
|
||||
if result.returncode != 0:
|
||||
print(f"Failed to delete {file}")
|
||||
|
||||
print(f"Validating {name} against chunklist: chunk {chunk_obj.total_chunks} passed")
|
||||
return True
|
||||
|
||||
|
||||
def _downloader(self, url, path, name) -> bool:
|
||||
"""
|
||||
Download file from URL
|
||||
"""
|
||||
dl_obj = network_handler.DownloadObject(url, path)
|
||||
dl_obj.download(display_progress=False, spawn_thread=True)
|
||||
|
||||
percentages_displayed = set()
|
||||
while dl_obj.is_active():
|
||||
if dl_obj.get_percent() in percentages_displayed:
|
||||
continue
|
||||
percentages_displayed.add(int(dl_obj.get_percent()))
|
||||
print(f" Downloading: {name}: {dl_obj.get_percent():.2f}% ({utilities.human_fmt(dl_obj.get_speed())})/s", end="\r")
|
||||
|
||||
print(f" Downloading: {name}: 100.00% ({utilities.human_fmt(dl_obj.get_speed())})/s")
|
||||
|
||||
if not dl_obj.download_complete:
|
||||
print("Download failed")
|
||||
subprocess.run(["/bin/rm", "-f", path]) # Retry later
|
||||
return False
|
||||
|
||||
|
||||
if Path(path).stat().st_size == 0:
|
||||
print("Downloaded file is empty, considering permanent failure") # Likely dead URL
|
||||
if not Path(Path(path).parent, "Dead URLs").exists():
|
||||
Path(Path(path).parent, "Dead URLs").mkdir()
|
||||
if Path(path).exists():
|
||||
subprocess.run(["/bin/mv", path, Path(Path(path).parent, "Dead URLs", Path(path).name)])
|
||||
|
||||
return True
|
||||
|
||||
|
||||
|
||||
def _does_file_exist(self, xnu_version: int, build: str, suffix: str) -> bool:
|
||||
"""
|
||||
Check if installer already exists in directory
|
||||
"""
|
||||
if xnu_version not in self._os_table:
|
||||
raise ValueError(f"Unsupported OS version: {xnu_version}")
|
||||
|
||||
if not Path(self._os_table[xnu_version]).exists():
|
||||
raise FileNotFoundError(f"Directory does not exist: {self._os_table[xnu_version]}")
|
||||
|
||||
# Check failed, as those are generally dead URLs
|
||||
for path in [Path(self._os_table[xnu_version]), Path(self._os_table[xnu_version], "Dead URLs")]:
|
||||
if not Path(path).exists():
|
||||
continue
|
||||
for file in path.iterdir():
|
||||
if file.is_dir():
|
||||
continue
|
||||
if not file.name.endswith(suffix):
|
||||
continue
|
||||
if f"({build})" in file.name:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def _get_remote_installer_catalog(self, os_version: int) -> dict:
|
||||
"""
|
||||
Get remote installer catalog from Apple's servers
|
||||
"""
|
||||
installers = {}
|
||||
print(f"SUCATALOG: Getting installers for macOS {os_data.os_conversion.kernel_to_os(os_version)}")
|
||||
for seed in macos_installer_handler.SeedType:
|
||||
print(f" Catalog: {seed.name}")
|
||||
result = macos_installer_handler.RemoteInstallerCatalog(seed_override=seed, os_override=os_version).available_apps
|
||||
installers.update(result)
|
||||
|
||||
return installers
|
||||
|
||||
|
||||
def _get_apple_db_items(self, variant: str = ".ipsw") -> dict:
|
||||
"""
|
||||
Get macOS installers from AppleDB
|
||||
"""
|
||||
|
||||
if variant not in ["InstallAssistant.pkg", ".ipsw"]:
|
||||
raise ValueError(f"Invalid variant: {variant}")
|
||||
|
||||
installers = {
|
||||
# "22F82": {
|
||||
# url: "https://swcdn.apple.com/content/downloads/36/06/042-01917-A_B57IOY75IU/oocuh8ap7y8l8vhu6ria5aqk7edd262orj/InstallAssistant.pkg",
|
||||
# version: "13.4.1",
|
||||
# build: "22F82",
|
||||
# }
|
||||
}
|
||||
|
||||
print(f"APPLEDB: Getting installers for variant: {variant}")
|
||||
|
||||
apple_db = network_handler.NetworkUtilities().get("https://api.appledb.dev/main.json")
|
||||
if apple_db is None:
|
||||
return installers
|
||||
|
||||
apple_db = apple_db.json()
|
||||
for group in apple_db:
|
||||
if group != "ios":
|
||||
continue
|
||||
for item in apple_db[group]:
|
||||
if "osStr" not in item:
|
||||
continue
|
||||
if item["osStr"] != "macOS":
|
||||
continue
|
||||
if "build" not in item:
|
||||
continue
|
||||
if "version" not in item:
|
||||
continue
|
||||
if "sources" not in item:
|
||||
continue
|
||||
for source in item["sources"]:
|
||||
if "links" not in source:
|
||||
continue
|
||||
|
||||
for entry in source["links"]:
|
||||
if "url" not in entry:
|
||||
continue
|
||||
if entry["url"].endswith(variant) is False:
|
||||
continue
|
||||
|
||||
models = []
|
||||
if "devices" in item:
|
||||
for device in item["devices"]:
|
||||
_device = device
|
||||
if "-" in device:
|
||||
_device = device.split("-")[0]
|
||||
if _device in models:
|
||||
continue
|
||||
models.append(_device)
|
||||
|
||||
# Attempt to match macos_installer_handler.py's format
|
||||
installers[item["build"]] = {
|
||||
"Version": item["version"],
|
||||
"Build": item["build"],
|
||||
"Link": entry["url"],
|
||||
"Size": -1,
|
||||
"integrity": None,
|
||||
"Source": "AppleDB",
|
||||
"Variant": "Beta" if item["beta"] else "Public",
|
||||
"OS": os_data.os_conversion.os_to_kernel(item["version"] if " " not in item["version"] else item["version"].split(" ")[0]),
|
||||
"Models": models,
|
||||
"Date": item["released"],
|
||||
}
|
||||
|
||||
return installers
|
||||
|
||||
|
||||
def _main(self) -> None:
|
||||
"""
|
||||
Main entry point
|
||||
"""
|
||||
installers = {}
|
||||
apple_db_ipsw_installers = {}
|
||||
apple_db_pkg_installers = {}
|
||||
for build in self._supported_oses:
|
||||
installers.update(self._get_remote_installer_catalog(os_version=build))
|
||||
|
||||
for installer in [".ipsw", "InstallAssistant.pkg"]:
|
||||
apple_db_items = self._get_apple_db_items(variant=installer)
|
||||
if installer == ".ipsw":
|
||||
apple_db_ipsw_installers = apple_db_items
|
||||
else:
|
||||
apple_db_pkg_installers = apple_db_items
|
||||
installers.update(apple_db_items)
|
||||
|
||||
# Sort by name
|
||||
installers = dict(sorted(installers.items(), key=lambda item: item[1]["Build"]))
|
||||
|
||||
print(f"Found {len(installers)} installers, checking which ones are missing")
|
||||
missing = []
|
||||
for build in installers:
|
||||
if self._does_file_exist(xnu_version=installers[build]["OS"], build=installers[build]["Build"], suffix=Path(installers[build]["Link"]).suffix) is True:
|
||||
continue
|
||||
missing.append(installers[build])
|
||||
|
||||
print(f"Found {len(missing)} missing installers:" if missing else "No missing installers found")
|
||||
for installer in missing:
|
||||
print(f" {Path(installer['Link']).suffix}: {installer['Version']} ({installer['Build']})")
|
||||
self._download_installer(installer)
|
||||
|
||||
|
||||
# Finally, fix names
|
||||
for apple_db_installers in [apple_db_ipsw_installers, apple_db_pkg_installers]:
|
||||
for installer in apple_db_installers:
|
||||
_build = apple_db_installers[installer]["Build"]
|
||||
_version = apple_db_installers[installer]["Version"]
|
||||
if _version.lower().endswith(" beta"):
|
||||
_version += " 1"
|
||||
elif " " not in _version:
|
||||
_version += " release"
|
||||
_base_name = f"{_version} ({_build})"
|
||||
|
||||
for os in self._os_table:
|
||||
for directory in [self._os_table[os], Path(self._os_table[os], "Dead URLs")]:
|
||||
for file in directory.iterdir():
|
||||
if file.is_dir():
|
||||
continue
|
||||
if f"({_build})" not in file.name and f" {_build} " not in file.name:
|
||||
continue
|
||||
|
||||
_name = _base_name
|
||||
|
||||
_current_suffix = Path(file).suffix
|
||||
if _current_suffix == ".pkg":
|
||||
_name += " InstallAssistant.pkg"
|
||||
elif _current_suffix == ".ipsw":
|
||||
_name += " Restore.ipsw"
|
||||
elif _current_suffix == ".integrityDataV1":
|
||||
if Path(file).name.endswith(" Restore.ipsw.integrityDataV1"):
|
||||
_name += " Restore.ipsw.integrityDataV1"
|
||||
elif Path(file).name.endswith("InstallAssistant.pkg.integrityDataV1"):
|
||||
_name += " InstallAssistant.pkg.integrityDataV1"
|
||||
else:
|
||||
continue
|
||||
else:
|
||||
continue
|
||||
|
||||
if Path(file).name == _name:
|
||||
continue
|
||||
|
||||
print(f"Renaming {file.name} to {_name}")
|
||||
result = subprocess.run(["/bin/mv", file, Path(directory, _name)])
|
||||
if result.returncode != 0:
|
||||
print(f"Failed to rename {file} to {Path(directory, _name)}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="macOS Installer Backup")
|
||||
parser.add_argument("--first-run", action="store_true", help="Create directories if missing")
|
||||
|
||||
InstallerBackup(**vars(parser.parse_args()))
|
||||
BIN
ci_tooling/pkg_assets/PkgBackground-AutoPkg.png
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
ci_tooling/pkg_assets/PkgBackground-Installer.png
Normal file
|
After Width: | Height: | Size: 320 KiB |
BIN
ci_tooling/pkg_assets/PkgBackground-Source-File.afdesign
Normal file
BIN
ci_tooling/pkg_assets/PkgBackground-Uninstaller.png
Normal file
|
After Width: | Height: | Size: 160 KiB |
13
ci_tooling/privileged_helper_tool/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
CC=clang
|
||||
OUTPUT=com.dortania.opencore-legacy-patcher.privileged-helper
|
||||
|
||||
all: clean release
|
||||
|
||||
release: main.m
|
||||
$(CC) -framework Foundation -framework Security -arch x86_64 -arch arm64 -mmacosx-version-min=10.9 -o $(OUTPUT) main.m
|
||||
|
||||
debug: main.m
|
||||
$(CC) -framework Foundation -framework Security -arch x86_64 -arch arm64 -mmacosx-version-min=10.9 -o $(OUTPUT) main.m -DDEBUG
|
||||
|
||||
clean:
|
||||
/bin/rm -f $(OUTPUT)
|
||||
34
ci_tooling/privileged_helper_tool/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# OpenCore Legacy Patcher Privileged Helper Tool
|
||||
|
||||
`com.dortania.opencore-legacy-patcher.privileged-helper` is OpenCore Legacy Patcher's Privileged Helper Tool.
|
||||
|
||||
The architecture is as such:
|
||||
1. The main application (OpenCore-Patcher.app) will send arguments to the privileged helper tool to execute.
|
||||
2. The privileged helper tool will check the code signature of the main application to ensure it is signed by Dortania.
|
||||
3. The privileged helper tool will then execute the command and return the output to the main application.
|
||||
|
||||
The helper tool is able to execute code as root by using the "Set UID" bit present on the file.
|
||||
|
||||
|
||||
## Running from source
|
||||
|
||||
Since running OpenCore Legacy Patcher from source will lack Dortania's code signature, you will need to disable code signature verification in the privileged helper tool otherwise root commands will fail.
|
||||
|
||||
To do so, compile the privileged helper tool with debug:
|
||||
```
|
||||
make debug
|
||||
```
|
||||
|
||||
Then when you build OpenCore-Patcher.pkg, the debug version of the helper tool will be used.
|
||||
|
||||
|
||||
### Security Considerations
|
||||
|
||||
When using the Privileged Helper Tool from source, you are now adding a security risk to your system. By disabling the code signature checks, any malicious application is given ability to execute code as root.
|
||||
|
||||
If possible, we highly recommend creating a developer account with Apple and signing the application with your own ["Developer ID Application" certificate](https://developer.apple.com/help/account/create-certificates/create-developer-id-certificates/). This will allow you to run the application without disabling code signature checks.
|
||||
|
||||
* Note that Dortania's Team ID will need to be replaced in main.m with your own Team ID (`S74BDJXQMD` -> `YOUR_TEAM`)
|
||||
* Additionally you will be required to compile OpenCore-Patcher.app with your own Developer ID Application certificate
|
||||
|
||||
If this is not possible, we recommend using [OpenCore Legacy Patcher's prebuilt binaries](../../SOURCE.md) instead.
|
||||
54
ci_tooling/privileged_helper_tool/install.sh
Executable file
@@ -0,0 +1,54 @@
|
||||
#!/bin/zsh --no-rcs
|
||||
# ------------------------------------------------------
|
||||
# Privileged Helper Tool Installer
|
||||
# ------------------------------------------------------
|
||||
# Moves to expected destination and sets SUID bit.
|
||||
# ------------------------------------------------------
|
||||
# Developed for internal testing, end users should be
|
||||
# using the PKG installer when released.
|
||||
# ------------------------------------------------------
|
||||
|
||||
|
||||
# MARK: Variables
|
||||
# ---------------------------
|
||||
helperName="com.dortania.opencore-legacy-patcher.privileged-helper"
|
||||
helperPath="/Library/PrivilegedHelperTools/$helperName"
|
||||
|
||||
# MARK: Functions
|
||||
# ---------------------------
|
||||
|
||||
function _setSUIDBit() {
|
||||
local binaryPath=$1
|
||||
|
||||
# Check if path is a directory
|
||||
if [[ -d $binaryPath ]]; then
|
||||
/bin/chmod -R +s $binaryPath
|
||||
else
|
||||
/bin/chmod +s $binaryPath
|
||||
fi
|
||||
}
|
||||
|
||||
function _copyHelper() {
|
||||
local sourcePath=$1
|
||||
local destinationPath=$2
|
||||
|
||||
# Check if destination path exists
|
||||
if [[ -e $destinationPath ]]; then
|
||||
# Check if destination path is a directory
|
||||
if [[ -d $destinationPath ]]; then
|
||||
/bin/rm -rf $destinationPath
|
||||
else
|
||||
/bin/rm -f $destinationPath
|
||||
fi
|
||||
fi
|
||||
|
||||
# Copy source to destination
|
||||
/bin/cp -R $sourcePath $destinationPath
|
||||
}
|
||||
|
||||
|
||||
# MARK: Main
|
||||
# ---------------------------
|
||||
|
||||
_copyHelper "./$helperName" $helperPath
|
||||
_setSUIDBit $helperPath
|
||||
152
ci_tooling/privileged_helper_tool/main.m
Normal file
@@ -0,0 +1,152 @@
|
||||
/*
|
||||
------------------------------------------------
|
||||
OpenCore Legacy Patcher Privileged Helper Tool
|
||||
------------------------------------------------
|
||||
Designed as an alternative to an XPC service,
|
||||
this tool is used to run commands as root.
|
||||
------------------------------------------------
|
||||
Server and client must have the same signing
|
||||
certificate in order to run commands.
|
||||
------------------------------------------------
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Security/Security.h>
|
||||
#include <libproc.h>
|
||||
|
||||
#define UTILITY_VERSION "1.0.0"
|
||||
|
||||
#define VALID_CLIENT_TEAM_ID @"S74BDJXQMD"
|
||||
|
||||
#define OCLP_PHT_ERROR_MISSING_ARGUMENTS 160
|
||||
#define OCLP_PHT_ERROR_SET_UID_MISSING 161
|
||||
#define OCLP_PHT_ERROR_SET_UID_FAILED 162
|
||||
#define OCLP_PHT_ERROR_SELF_PATH_MISSING 163
|
||||
#define OCLP_PHT_ERROR_PARENT_PATH_MISSING 164
|
||||
#define OCLP_PHT_ERROR_SIGNING_INFORMATION_MISSING 165
|
||||
#define OCLP_PHT_ERROR_INVALID_TEAM_ID 166
|
||||
#define OCLP_PHT_ERROR_INVALID_CERTIFICATES 167
|
||||
#define OCLP_PHT_ERROR_COMMAND_MISSING 168
|
||||
#define OCLP_PHT_ERROR_COMMAND_FAILED 169
|
||||
#define OCLP_PHT_ERROR_CATCH_ALL 170
|
||||
|
||||
|
||||
NSDictionary *getSigningInformationFromPath(NSString *path) {
|
||||
SecStaticCodeRef codeRef;
|
||||
OSStatus status = SecStaticCodeCreateWithPath((__bridge CFURLRef)[NSURL fileURLWithPath:path], kSecCSDefaultFlags, &codeRef);
|
||||
if (status != errSecSuccess) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
CFDictionaryRef codeDict = NULL;
|
||||
status = SecCodeCopySigningInformation(codeRef, kSecCSSigningInformation, &codeDict);
|
||||
if (status != errSecSuccess) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
return (__bridge NSDictionary *)codeDict;
|
||||
}
|
||||
|
||||
NSString *getParentProcessPath() {
|
||||
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
|
||||
if (proc_pidpath(getppid(), pathbuf, sizeof(pathbuf)) <= 0) {
|
||||
return nil;
|
||||
}
|
||||
NSString *path = [NSString stringWithUTF8String:pathbuf];
|
||||
return path;
|
||||
}
|
||||
|
||||
NSString *getProcessPath() {
|
||||
NSString *path = [[NSBundle mainBundle] executablePath];
|
||||
return path;
|
||||
}
|
||||
|
||||
BOOL isSBitSet(NSString *path) {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
NSDictionary *attributes = [fileManager attributesOfItemAtPath:path error:nil];
|
||||
if (attributes == nil) {
|
||||
return NO;
|
||||
}
|
||||
return (attributes.filePosixPermissions & S_ISUID) != 0;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
@autoreleasepool {
|
||||
// We simply return if no arguments are passed
|
||||
if (argc < 2) {
|
||||
return OCLP_PHT_ERROR_MISSING_ARGUMENTS;
|
||||
}
|
||||
|
||||
if (argc == 2 && (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-v") == 0)) {
|
||||
printf("%s\n", UTILITY_VERSION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Verify whether we can run as root
|
||||
NSString *processPath = getProcessPath();
|
||||
if (processPath == nil) {
|
||||
return OCLP_PHT_ERROR_SELF_PATH_MISSING;
|
||||
}
|
||||
|
||||
if (!isSBitSet(processPath)) {
|
||||
return OCLP_PHT_ERROR_SET_UID_MISSING;
|
||||
}
|
||||
|
||||
setuid(0);
|
||||
if (getuid() != 0) {
|
||||
return OCLP_PHT_ERROR_SET_UID_FAILED;
|
||||
}
|
||||
|
||||
NSString *parentProcessPath = getParentProcessPath();
|
||||
if (parentProcessPath == nil) {
|
||||
return OCLP_PHT_ERROR_PARENT_PATH_MISSING;
|
||||
}
|
||||
|
||||
NSDictionary *processSigningInformation = getSigningInformationFromPath(processPath);
|
||||
NSDictionary *parentProcessSigningInformation = getSigningInformationFromPath(parentProcessPath);
|
||||
|
||||
if (processSigningInformation == nil || parentProcessSigningInformation == nil) {
|
||||
return OCLP_PHT_ERROR_SIGNING_INFORMATION_MISSING;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
// Skip Team ID check in debug mode
|
||||
// DO NOT USE IN PRODUCTION
|
||||
#else
|
||||
// Check Team ID
|
||||
if (![processSigningInformation[@"teamid"] isEqualToString:VALID_CLIENT_TEAM_ID] || ![parentProcessSigningInformation[@"teamid"] isEqualToString:VALID_CLIENT_TEAM_ID]) {
|
||||
return OCLP_PHT_ERROR_INVALID_TEAM_ID;
|
||||
}
|
||||
|
||||
// Check Certificates
|
||||
if (![processSigningInformation[@"certificates"] isEqualToArray:parentProcessSigningInformation[@"certificates"]]) {
|
||||
return OCLP_PHT_ERROR_INVALID_CERTIFICATES;
|
||||
}
|
||||
#endif
|
||||
|
||||
NSString *command = nil;
|
||||
NSArray *arguments = @[];
|
||||
if (argc == 2) {
|
||||
command = [NSString stringWithUTF8String:argv[1]];
|
||||
} else {
|
||||
command = [NSString stringWithUTF8String:argv[1]];
|
||||
for (int i = 2; i < argc; i++) {
|
||||
arguments = [arguments arrayByAddingObject:[NSString stringWithUTF8String:argv[i]]];
|
||||
}
|
||||
}
|
||||
|
||||
// Verify command exists
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:command]) {
|
||||
return OCLP_PHT_ERROR_COMMAND_MISSING;
|
||||
}
|
||||
|
||||
NSTask *task = [[NSTask alloc] init];
|
||||
[task setLaunchPath:command];
|
||||
[task setArguments:arguments];
|
||||
[task launch];
|
||||
[task waitUntilExit];
|
||||
return [task terminationStatus];
|
||||
}
|
||||
return OCLP_PHT_ERROR_CATCH_ALL; // Should never reach here
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?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>CFBundleDisplayName</key>
|
||||
<string>OpenCore-Patcher</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>OpenCore-Patcher</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>AppIcon.icns</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.dortania.opencore-legacy-patcher</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>OpenCore Legacy Patcher</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.10.0</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2020-2024 Dortania</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
ci_tooling/update_shim/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
Executable file
8
ci_tooling/update_shim/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# OpenCore-Patcher Update Shim
|
||||
|
||||
To handle the new PKG installation method, old versions of OpenCore Legacy Patcher updating to newer versions will still require 'OpenCore-Patcher.app' to be available for download.
|
||||
|
||||
Thus the goal of this app is to install an embedded PKG under ./OpenCore-Patcher.app/Contents/Resources/OpenCore-Patcher.pkg to handle the update process.
|
||||
|
||||
Source is available at:
|
||||
* https://github.com/dortania/OCLP-Helper
|
||||
@@ -1,57 +0,0 @@
|
||||
# Copyright (C) 2022, Mykola Grymalyuk
|
||||
|
||||
# Within AppleMobileFileIntegrity.kext, Apple has a bitmask-based boot-arg (ex. amfi=128)
|
||||
# Below information is from reversed values in 13.0 Beta 6's AppleMobileFileIntegrity.kext
|
||||
# Currently only 'amfi=3' has been used by Apple publicly
|
||||
# - 0x3 used in 11.0.1 dyld source:
|
||||
# - https://github.com/apple-oss-distributions/dyld/blob/5c9192436bb195e7a8fe61f22a229ee3d30d8222/testing/test-cases/kernel-hello-world.dtest/main.c#L2
|
||||
|
||||
import enum
|
||||
|
||||
class AppleMobileFileIntegrity(enum.IntEnum):
|
||||
# Names set are solely for readability
|
||||
# Internal names are unknown
|
||||
AMFI_ALLOW_TASK_FOR_PID: int = 0x1 # Allow Task for PID (alt. amfi_unrestrict_task_for_pid=0x1)
|
||||
AMFI_ALLOW_INVALID_SIGNATURE: int = 0x2 # Reduce sig enforcement (alt. amfi_allow_any_signature=0x1)
|
||||
AMFI_LV_ENFORCE_THIRD_PARTY: int = 0x4 # Don't mark external binaries as platform binaries
|
||||
AMFI_UNKNOWN_1: int = 0x8
|
||||
AMFI_UNKNOWN_2: int = 0x10
|
||||
AMFI_UNKNOWN_3: int = 0x20
|
||||
AMFI_UNKNOWN_4: int = 0x40
|
||||
AMFI_ALLOW_EVERYTHING: int = 0x80 # Disable sig enforcement and Library Validation (alt. amfi_get_out_of_my_way=0x1)
|
||||
|
||||
|
||||
# Internally within AMFI.kext, Apple references 0x2 and 0x80 as both 'Disable signature enforcement'
|
||||
# However 0x80 is a higher privilege than 0x2, and breaks TCC support in OS (ex. Camera, Microphone, etc prompts)
|
||||
|
||||
# Supported boot-args within AMFI.kext, last compared against 13.0 Beta 6
|
||||
#
|
||||
# Within _initializeAppleMobileFileIntegrity():
|
||||
# - amfi_unrestrict_task_for_pid=0x1
|
||||
# - amfi_dev_mode_policy=0x1
|
||||
# - amfi_allow_any_signature=0x1
|
||||
# - amfi_get_out_of_my_way=0x1
|
||||
# - amfi_unrestricted_local_signing=0x1
|
||||
# - pmap_cs_unrestricted_local_signing=0x1
|
||||
# - amfi_ready_to_roll=0x1
|
||||
# - cs_enforcement_disable=0x1
|
||||
#
|
||||
# Within AMFIInitializeLocalSigningPublicKey():
|
||||
# - -restore
|
||||
#
|
||||
# Within macOSPolicyConfigurationInit():
|
||||
# - amfi_force_policy=0x1
|
||||
# - amfi_block_unsigned_code=0x1
|
||||
# - amfi_force_cs_kill=0x1
|
||||
# - amfi_hsp_disable=0x1
|
||||
# - amfi_hsp_logging=0x1
|
||||
# - amfi_allow_bni_as_platform=0x1
|
||||
# - amfi_allow_non_platform=0x1
|
||||
# - amfi_prevent_old_entitled_platform_binaries=0x1
|
||||
# - amfi_allow_only_tc=0x1
|
||||
# - amfi_allow_only_tc_override=0x1
|
||||
#
|
||||
# Within configurationSettingsInit()
|
||||
# - amfi_enforce_launch_constraints=0x1
|
||||
# - amfi_allow_3p_launch_constraints=0x1
|
||||
# - BATS_TESTPLAN_ID="Custom Team ID"
|
||||
@@ -1,24 +0,0 @@
|
||||
import enum
|
||||
|
||||
|
||||
class cpu_data(enum.IntEnum):
|
||||
pentium_4 = 0
|
||||
yonah = 1
|
||||
conroe = 2
|
||||
penryn = 3
|
||||
nehalem = 4 # (Westmere included)
|
||||
sandy_bridge = 5 # 2000
|
||||
ivy_bridge = 6 # 3000
|
||||
haswell = 7 # 4000
|
||||
broadwell = 8 # 5000
|
||||
skylake = 9 # 6000
|
||||
kaby_lake = 10 # 7000
|
||||
coffee_lake = 11 # 8000
|
||||
comet_lake = 12 # 9000
|
||||
ice_lake = 13 # 10000
|
||||
|
||||
apple_dtk = 112 # A12
|
||||
apple_m1 = 114 # A14
|
||||
apple_m1_pro = 115
|
||||
apple_m1_max = 116
|
||||
apple_m1_ultra = 117
|
||||
@@ -10,5 +10,6 @@
|
||||
"single-title": false,
|
||||
"ul-style": {
|
||||
"style": "asterisk"
|
||||
}
|
||||
},
|
||||
"link-fragments": false
|
||||
}
|
||||
|
||||
@@ -24,29 +24,29 @@ module.exports = {
|
||||
],
|
||||
base: '/OpenCore-Legacy-Patcher/',
|
||||
|
||||
watch: {
|
||||
$page(newPage, oldPage) {
|
||||
if (newPage.key !== oldPage.key) {
|
||||
requestAnimationFrame(() => {
|
||||
if (this.$route.hash) {
|
||||
const element = document.getElementById(this.$route.hash.slice(1));
|
||||
watch: {
|
||||
$page(newPage, oldPage) {
|
||||
if (newPage.key !== oldPage.key) {
|
||||
requestAnimationFrame(() => {
|
||||
if (this.$route.hash) {
|
||||
const element = document.getElementById(this.$route.hash.slice(1));
|
||||
|
||||
if (element && element.scrollIntoView) {
|
||||
element.scrollIntoView();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
if (element && element.scrollIntoView) {
|
||||
element.scrollIntoView();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
markdown: {
|
||||
extendMarkdown: md => {
|
||||
md.use(require('markdown-it-multimd-table'), {
|
||||
rowspan: true,
|
||||
});
|
||||
}
|
||||
},
|
||||
markdown: {
|
||||
extendMarkdown: md => {
|
||||
md.use(require('markdown-it-multimd-table'), {
|
||||
rowspan: true,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
theme: 'vuepress-theme-succinct',
|
||||
globalUIComponents: [
|
||||
@@ -56,10 +56,10 @@ module.exports = {
|
||||
themeConfig: {
|
||||
lastUpdated: true,
|
||||
repo: 'https://github.com/dortania/OpenCore-Legacy-Patcher/',
|
||||
docsDir: 'docs',
|
||||
docsBranch: 'main',
|
||||
editLinks: true,
|
||||
editLinkText: 'Help us improve this page!',
|
||||
docsDir: 'docs',
|
||||
docsBranch: 'main',
|
||||
editLinks: true,
|
||||
editLinkText: 'Help us improve this page!',
|
||||
logo: 'homepage.png',
|
||||
|
||||
sidebar: [{
|
||||
@@ -67,8 +67,9 @@ module.exports = {
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'START',
|
||||
'MODELS',
|
||||
'START',
|
||||
'MODELS',
|
||||
'FAQ',
|
||||
]
|
||||
|
||||
},
|
||||
@@ -78,7 +79,7 @@ module.exports = {
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'INSTALLER',
|
||||
'BUILD',
|
||||
'BUILD',
|
||||
]
|
||||
|
||||
},
|
||||
@@ -87,26 +88,43 @@ module.exports = {
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'BOOT',
|
||||
'POST-INSTALL',
|
||||
'BOOT',
|
||||
'POST-INSTALL',
|
||||
]
|
||||
|
||||
},
|
||||
{
|
||||
title: 'macOS Sequoia',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'SEQUOIA-DROP',
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'macOS Sonoma',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'SONOMA-DROP',
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
title: 'macOS Ventura',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
['VENTURA-DROP', 'macOS Ventura Support'],
|
||||
'VENTURA-DROP',
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
},
|
||||
|
||||
{
|
||||
title: 'macOS Monterey',
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
['MONTEREY-DROP', 'macOS Monterey Support'],
|
||||
'MONTEREY-DROP',
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -114,14 +132,15 @@ module.exports = {
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'ACCEL',
|
||||
'TROUBLESHOOTING',
|
||||
'DEBUG',
|
||||
'UPDATE',
|
||||
'UNINSTALL',
|
||||
'ICNS',
|
||||
'WINDOWS',
|
||||
'UNIVERSALCONTROL',
|
||||
'ACCEL',
|
||||
'TROUBLESHOOTING',
|
||||
'DEBUG',
|
||||
'UPDATE',
|
||||
'UNINSTALL',
|
||||
'ICNS',
|
||||
'WINDOWS',
|
||||
'UNIVERSALCONTROL',
|
||||
'PROCESS',
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -129,8 +148,8 @@ module.exports = {
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'DONATE',
|
||||
'LICENSE',
|
||||
'DONATE',
|
||||
'LICENSE',
|
||||
]
|
||||
|
||||
},
|
||||
@@ -139,22 +158,22 @@ module.exports = {
|
||||
collapsable: false,
|
||||
sidebarDepth: 1,
|
||||
children: [
|
||||
'ISSUES-HOLD',
|
||||
'TESTED',
|
||||
'TERMS',
|
||||
'HOW',
|
||||
'PATCHEXPLAIN',
|
||||
'ISSUES-HOLD',
|
||||
'TERMS',
|
||||
'HOW',
|
||||
'PATCHEXPLAIN',
|
||||
]
|
||||
|
||||
},
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
'@vuepress/plugin-back-to-top',
|
||||
'@vuepress/back-to-top',
|
||||
'vuepress-plugin-smooth-scroll',
|
||||
['vuepress-plugin-medium-zoom',
|
||||
'vuepress-plugin-fulltext-search',
|
||||
['@vuepress/medium-zoom',
|
||||
{
|
||||
selector: "img",
|
||||
selector: ".theme-succinct-content :not(a) > img",
|
||||
options: {
|
||||
background: 'var(--bodyBgColor)'
|
||||
}
|
||||
|
||||
@@ -47,3 +47,22 @@ tr
|
||||
background-color var(--sideBgColor)!important
|
||||
box-shadow 0px 0px 2px var(--bodyBgColor)
|
||||
right -12%!important
|
||||
|
||||
|
||||
@media (min-width: 1000px)
|
||||
.theme-succinct-content:not(.custom)
|
||||
max-width 70%
|
||||
|
||||
.search-box .suggestion a .suggestion-row .page-title
|
||||
border-color var(--borderColor) !important
|
||||
background-color: var(--sideBgColor) !important
|
||||
|
||||
.search-box .suggestion a .suggestion-row .suggestion-content
|
||||
border-color var(--borderColor) !important
|
||||
|
||||
.search-box .suggestion a .parent-page-title
|
||||
background-color: var(--bodyBgColor) !important
|
||||
color: var(--accentColor) !important
|
||||
|
||||
.search-box .suggestion.focused a
|
||||
color: var(--navItemHoverColor) !important
|
||||
@@ -22,4 +22,4 @@ $bodyBgColorDark = #2d3033
|
||||
$sideBgColorDark = #363b40
|
||||
$badgeTipColorDark = #023e52
|
||||
|
||||
$contentWidth = 900px
|
||||
$contentWidth = 900px
|
||||
@@ -7,7 +7,7 @@
|
||||
* [Keyboard Backlight broken](#keyboard-backlight-broken)
|
||||
* [Photos and Maps Apps Heavily Distorted](#photos-and-maps-apps-heavily-distorted)
|
||||
* [Cannot press "Done" when editing a Sidebar Widget](#cannot-press-done-when-editing-a-sidebar-widget)
|
||||
* [Wake from sleep heavily distorted on AMD/ATI in macOS 11.3 and newer](#wake-from-sleep-heavily-distorted-on-amd-ati-in-macos-11-3-and-newer)
|
||||
* [Wake from sleep heavily distorted on AMD/ATI from macOS 11.3 to Monterey](#wake-from-sleep-heavily-distorted-on-amd-ati-from-macos-11-3-to-monterey)
|
||||
* [Unable to switch GPUs on 2011 15" and 17" MacBook Pros](#unable-to-switch-gpus-on-2011-15-and-17-macbook-pros)
|
||||
* [Erratic Colours on ATI TeraScale 2 GPUs (HD5000/HD6000)](#erratic-colours-on-ati-terascale-2-gpus-hd5000-hd6000)
|
||||
* [Unable to allow Safari Extensions](#unable-to-allow-Safari-Extensions)
|
||||
@@ -27,16 +27,18 @@ Metal is Apple's in-house graphics API that acts as a replacement for OpenGL/Ope
|
||||
|
||||
| Graphics Vendor | Architecture | Series | Supports Metal |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ATI | TeraScale 1 | HD2000 - HD4000 | <span style="color:red">No</span> |
|
||||
| ^^ | TeraScale 2 | HD5000 - HD6000 | ^^ |
|
||||
| AMD | GCN (and newer) | HD7000+ | <span style="color:green">Yes</span> |
|
||||
| NVIDIA | Tesla | 8000GT - GT300 | <span style="color:red">No</span> |
|
||||
| ^^ | Fermi | GT400 - GT500 | ^^ |
|
||||
| ^^ | Kepler | GT600 - GT700 | <span style="color:green">Yes</span> |
|
||||
| Intel | GMA | GMA900 - GMA3000 | <span style="color:red">No</span> |
|
||||
| ATI | TeraScale 1 | HD 2XXX - HD 4XXX | <span style="color:red">No</span> |
|
||||
| ^^ | TeraScale 2 | HD 5XXX - HD 6XXX | ^^ |
|
||||
| AMD | GCN (and newer) | HD 7XXX+ | <span style="color:green">Yes</span> |
|
||||
| NVIDIA | Tesla | 8XXX - 3XX | <span style="color:red">No</span> |
|
||||
| ^^ | Fermi | 4XX - 5XX | ^^ |
|
||||
| ^^ | Kepler | 6XX - 7XX | <span style="color:green">Yes</span> |
|
||||
| ^^ | Maxwell | 8XX - 9XX | <span style="color:red">No (on 10.14 and newer)</span> |
|
||||
| ^^ | Pascal | 10XX | ^^ |
|
||||
| Intel | GMA | GMA 900 - GMA X3000 | <span style="color:red">No</span> |
|
||||
| ^^ | Iron Lake | HD series | ^^ |
|
||||
| ^^ | Sandy Bridge | HD3000 | ^^ |
|
||||
| ^^ | Ivy Bridge (and newer) | HD4000 | <span style="color:green">Yes</span> |
|
||||
| ^^ | Sandy Bridge | HD 3000 | ^^ |
|
||||
| ^^ | Ivy Bridge (and newer) | HD 4000 | <span style="color:green">Yes</span> |
|
||||
|
||||
:::
|
||||
|
||||
@@ -44,7 +46,7 @@ Metal is Apple's in-house graphics API that acts as a replacement for OpenGL/Ope
|
||||
|
||||
By default with the non-Metal acceleration patches, many background blur menus may act distorted when moving a cursor over it. With 0.4.1 and newer, users can enable a new Beta Blur feature to try and resolve the issue:
|
||||
|
||||

|
||||

|
||||
|
||||
Do note that enabling beta blurs can be more demanding on slower hardware
|
||||
## Downloading older non-Metal Apps
|
||||
@@ -62,12 +64,15 @@ Currently Zoom relies partially on Metal and so needs a small binary patch. Dosd
|
||||
* [Zoom Non-Metal Fix](http://dosdude1.com/catalina/zoomnonmetal-new.command.zip)
|
||||
|
||||
## Unable to grant special permissions to apps (ie. Camera Access to Zoom)
|
||||
Currently for Ventura 13.3 and newer, due to new patches required, permissions are yet again broken. Use TCCPlus in the Workaround dropdown to work around the issue.
|
||||
|
||||
With version 0.2.5, this issue should be full resolved
|
||||
This issue is fully resolved for 13.2.1 and lower starting from 0.2.5.
|
||||
|
||||
::: details 0.2.4 and older Work-Around
|
||||
::: details Workaround for 0.2.4, Ventura 13.3+
|
||||
|
||||
Due to the usage of `amfi_get_out_of_my_way=1`, macOS will fail to prompt users for special permissions upon application start as well as omit the entires in System Preferences. To work around this, we recommend users install [tccplus](https://github.com/jslegendre/tccplus) to manage permissions.
|
||||
Due to the usage of amfi_get_out_of_my_way=1, macOS will fail to prompt users for special permissions upon application start as well as omit the entries in System Preferences. To work around this, we recommend users install tccplus to manage permissions.
|
||||
|
||||
[Download TCCPlus](https://github.com/jslegendre/tccplus)
|
||||
|
||||
Example usage with Discord and microphone permissions:
|
||||
|
||||
@@ -104,9 +109,11 @@ Due to the Metal Backend, the enhanced color output of these apps seems to heavi
|
||||
|
||||
Workaround: Press some combination of Tab, or Tab and then Shift-Tab, or just Shift-Tab until the "Done" button is highlighted. Then press spacebar to activate the button, the same as in any other dialog with a highlighted button halo.
|
||||
|
||||
## Wake from sleep heavily distorted on AMD/ATI in macOS 11.3 and newer
|
||||
## Wake from sleep heavily distorted on AMD/ATI from macOS 11.3 to Monterey
|
||||
|
||||
Unfortunately, this is a very well known issue that the community is investigating. A currently known solution is to downgrade to macOS 11.2.3 or older until a proper fix can be found. Additionally, logging out and logging back in can resolve the issue without requiring a reboot.
|
||||
**Fixed for macOS Ventura starting from 0.6.6. Big Sur and Monterey will continue to exhibit the issue.**
|
||||
|
||||
For older versions, only known solution is to downgrade to macOS 11.2.3 or older. Additionally, logging out and logging back in can resolve the issue without requiring a reboot.
|
||||
|
||||
* Note, this issue should be exclusive to TeraScale 1 GPUs (ie. HD2000-4000). TeraScale 2 GPUs should not exhibit this issue.
|
||||
|
||||
@@ -183,7 +190,7 @@ A somewhat strange issue on Intel HD3000-based Macs, on 3rd party displays somet
|
||||
|
||||
| Default Color Profile | Display/Display P3 Profile |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
## Cannot Pair Bluetooth Devices
|
||||
|
||||
|
||||
25
docs/BOOT.md
@@ -6,7 +6,7 @@ Reboot the machine while holding `Option` to select the EFI Boot entry with the
|
||||
|
||||
* This will be the Mac Boot Picker
|
||||
|
||||

|
||||

|
||||
|
||||
::: details Note for Mac Pros/Xserves/iMacs with unflashed GPUs
|
||||
|
||||
@@ -27,7 +27,7 @@ Now you'll want to get a list of drive identifiers. To do so, run the following
|
||||
diskutil list
|
||||
```
|
||||
The command should produce a list of drives installed in your system:
|
||||

|
||||

|
||||
|
||||
Keep track of the drive with the OCLP install. You will need the drive identifer for later.
|
||||
|
||||
@@ -37,7 +37,7 @@ Run the following command (Replace X with the drive number):
|
||||
```sh
|
||||
diskutil mount diskXs1
|
||||
```
|
||||

|
||||

|
||||
If everything is correct, the EFI partion should be mounted.
|
||||
|
||||
Now you'll want to use the `bless` command to set the default boot device:
|
||||
@@ -45,7 +45,7 @@ Now you'll want to use the `bless` command to set the default boot device:
|
||||
bless --mount /Volumes/EFI --setBoot --file /Volumes/EFI/System/Library/CoreServices/boot.efi
|
||||
```
|
||||
Once the command is run, it should produce no output.
|
||||

|
||||

|
||||
|
||||
If the command produces an output, ensure that you've typed it in correctly.
|
||||
|
||||
@@ -56,7 +56,7 @@ Now that you've loaded OpenCore, "select Install macOS":
|
||||
|
||||
* This will be the OpenCore Picker
|
||||
|
||||

|
||||

|
||||
|
||||
You will soon reach the installer screen! If you enabled verbose mode when building OCLP, a lot of text will run across the screen. From there, it's just like any normal macOS install. For an example of how the boot process looks, see the following video:
|
||||
|
||||
@@ -64,7 +64,7 @@ You will soon reach the installer screen! If you enabled verbose mode when build
|
||||
|
||||
If your Mac is looping back into the beginning of the setup after the first reboot, turn it off, start it again and hold `Option`. This time, select the option with a grey hard disk icon, it can say "macOS Installer" or the name you gave the disk during the installer process. Keep repeating this step after every reboot if necessary.
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
::: warning
|
||||
@@ -73,5 +73,18 @@ If your Mac is looping back into the beginning of the setup after the first rebo
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
|
||||
**T1 Macs**: When installing macOS Sonoma or newer on a T1 system, full disk wipe will remove T1 functionality (touchbar etc). Therefore when installing, only wipe the volume containing the operating system.
|
||||
|
||||
<div align="center">
|
||||
<img src="./images/wipe-volume.png" alt="WipeVolume" width="800" />
|
||||
</div>
|
||||
|
||||
[More info here](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#no-t1-functionality-after-installing-sonoma-or-newer)
|
||||
|
||||
:::
|
||||
|
||||
|
||||
# Once installed and booting, head to [Post-Installation](./POST-INSTALL.md)
|
||||
|
||||
|
||||
@@ -6,20 +6,24 @@ If you haven't downloaded OpenCore Patcher yet, do so now:
|
||||
|
||||
* [OpenCore Legacy Patcher Releases](https://github.com/dortania/Opencore-Legacy-Patcher/releases)
|
||||
|
||||
Next, run the `OpenCore-Patcher.app`:
|
||||
Next, run the `OpenCore-Patcher.app`
|
||||
|
||||

|
||||
Here we'll select Build and Install OpenCore and start building:
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img src="./images/OCLP-GUI-Main-Menu.png" alt="OCLP GUI Main Menu" width="800" />
|
||||
</div>
|
||||
|
||||
::: warning
|
||||
OpenCore configurations are hardware specific.
|
||||
If you're building OpenCore for a different model than you're currently running, it is absolutely necessary to select the proper model from Settings.
|
||||
:::
|
||||
|
||||
Here we'll select Build and Install OpenCore and start building:
|
||||
|
||||
| Start Building | Finished Building |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
Once it finishes building, you'll want to select the Install OpenCore button:
|
||||
|
||||
@@ -28,6 +32,6 @@ Once it finishes building, you'll want to select the Install OpenCore button:
|
||||
|
||||
| Select Drive | Select Partition |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
# Once finished, head to [Booting OpenCore and macOS](./BOOT.md)
|
||||
|
||||
@@ -10,17 +10,19 @@ The easiest way to debug yourself is via Patcher Settings. Here there are many d
|
||||
* "Enable OpenCore DEBUG"
|
||||
* "Enable Kext DEBUG"
|
||||
|
||||

|
||||
|
||||
When you've enabled these 3 options, rebuild OpenCore and install to your drive. This will provide much greater debug information as well as write logs to the EFI Partition.
|
||||
|
||||
## Obtaining OpenCore logs from disk
|
||||
|
||||
With "Enable OpenCore DEBUG" set, on every boot there will be a .txt file generated on the EFI Partition. To grab these logs, [download and run MountEFI](https://github.com/corpnewt/MountEFI):
|
||||
|
||||

|
||||

|
||||
|
||||
Once you've mounted the EFI Partition of the drive you have macOS on, you should see some nice logs:
|
||||
|
||||

|
||||

|
||||
|
||||
## Obtaining Kernel logs from macOS
|
||||
|
||||
|
||||
@@ -1,38 +1,7 @@
|
||||
# Supporting the patcher
|
||||
|
||||
OpenCore Legacy Patcher is a hobby project for us developers, and while we love helping out the community, it's very difficult for us to troubleshoot issues remotely. The best way for us to get to work on the patcher, fix issues and add enhancements is having the hardware in-hand. As a hobby project, neither of the main developers can afford to buy every legacy Mac to test on.
|
||||
We have opened OpenCollective in order to manage donations as well as be transparent about where the donated money is going. If you want to support the patcher with money donation, you can do so below.
|
||||
|
||||
The best way to support us in all honesty is to donate any old hardware you no longer need, as this allows us to have machines to test locally and push fixes much faster. While we appreciate cash donations, this makes it much more difficult for us to handle as an organization.
|
||||
[OpenCollective](https://opencollective.com/opencore-legacy-patcher)
|
||||
|
||||
Main sections of help we'd appreciate:
|
||||
|
||||
* Donating any Mac you own
|
||||
* Does require SSE4,1 CPU to test on Sierra and newer however
|
||||
|
||||
Additionally, hardware info dumps are greatly beneficial for us to determine what patches a machine might need:
|
||||
|
||||
* [IORegistryExplorer](https://github.com/khronokernel/IORegistryClone/blob/master/ioreg-210.zip?raw=true)
|
||||
* `File -> SaveAs` and open an issue on Github
|
||||
* Note: We want IOReg dumps of hardware not running on OpenCore, instead running a clean, officially supported OS by the machine
|
||||
|
||||
If you have any legacy hardware you're willing to donate or want to buy us hardware, please contact us at the following email:
|
||||
|
||||
* khronokernel@icloud.com
|
||||
|
||||
Current hardware we own:
|
||||
|
||||
| Model | CPU | GPU | Owner | Notes |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| MacBook5,1 | Penryn | 9400M | Mykola | N/A |
|
||||
| MacBook7,1 | Penryn | GT320M | Dhinak | N/A |
|
||||
| MacBook7,1 | Penryn | GT320M | Mykola | N/A |
|
||||
| MacBookPro5,3 | Penryn | 9400M + 9600M | Dhinak | Display's partially broken |
|
||||
| MacBookPro8,2 | Sandy Bridge | HD3000 | Mykola | Dead dGPU |
|
||||
| MacPro3,1 | Penryn | GTX 680 | Dhinak | N/A |
|
||||
| Macmini4,1 | Penryn | GT320M | Dhinak | N/A |
|
||||
|
||||
Dead Hardware:
|
||||
| Model | CPU | GPU | Owner | Notes |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| MacPro3,1 | Penryn | HD5770, RX570, GT710 | Mykola | No longer powers on |
|
||||
| MacPro4,1 | Westmere | HD7950 | Mykola | Dead Northbridge on CPU Tray |
|
||||
If you wish, you can also donate legacy hardware you don't need anymore as long as it makes sense logistically. In this case, reach out on the Discord server.
|
||||
|
||||
75
docs/FAQ.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# FAQ
|
||||
|
||||
* [Why are the settings "not saving"?](#why-are-the-settings-not-saving)
|
||||
* [Can I use the same USB install media as a universal installer?](#can-i-use-the-same-usb-install-media-as-a-universal-installer)
|
||||
* [Can I use OTA updates?](#can-i-use-ota-updates)
|
||||
* [Can I update to macOS betas?](#can-i-update-to-macos-betas)
|
||||
* [Can I use automatic updates?](#can-i-use-automatic-updates)
|
||||
* [Why is my system slow?](#why-is-my-system-slow)
|
||||
* [Crashing in random places](#crashing-in-random-places)
|
||||
* [Why isn't iPhone Mirroring working?](#why-isn-t-iphone-mirroring-working)
|
||||
* [Where is Apple Intelligence?](#where-is-apple-intelligence)
|
||||
|
||||
|
||||
## Why are the settings "not saving"?
|
||||
|
||||
OpenCore Legacy Patcher is a config build tool and as such the user interface always reverts to safe defaults, the user interface therefore **does not** reflect the status of settings. Settings are accounted for and saved by the OpenCore building process and you will always have to build OpenCore again after settings change.
|
||||
|
||||
Settings are saved to a config.plist file inside your EFI partition.
|
||||
|
||||
In SIP settings, booted SIP is reported in text form e.g. "0x803" but the checkboxes **do not** reflect the applied settings. Refer to [SIP Settings](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#sip-settings) for more information.
|
||||
|
||||
## Can I use the same USB install media as a universal installer?
|
||||
|
||||
OpenCore configurations are device specific, due to different quirks needed for different systems. If you are building OpenCore for a different system that you're running, you will have to select the targeted model from Settings before building OpenCore on the USB media.
|
||||
|
||||
When building OpenCore on a different system, OCLP cannot be aware of all the hardware installed in the target, meaning safe defaults will be used. However, this may not be the most optimal experience especially with custom hardware. As such it's recommended to rebuild OpenCore **on device** to apply settings that are based on hardware detection, after the OS has been installed.
|
||||
|
||||
## Can I use OTA updates?
|
||||
|
||||
You can. However it is extremely recommended to use USB drive for major OS upgrades (such as 13 -> 14) to avoid larger issues from potentially occurring.
|
||||
|
||||
General updates are usually fine, though it is always a good idea to wait few days to see whether patches break and have to be fixed.
|
||||
|
||||
## Can I update to macOS betas?
|
||||
|
||||
If you are feeling brave and don't mind having to possibly recover your system. However, be advised that no help will be given in situations where a beta was installed.
|
||||
|
||||
## Can I use automatic updates?
|
||||
|
||||
It is extremely recommended to disable automatic updates (even downloading) when using OCLP, as Apple has recently changed the way automatic updates work. You can still manually initiate an update when you're ready to do so.
|
||||
|
||||
For a related "System version mismatch" error while root patching, refer to [System version mismatch error when root patching](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#system-version-mismatch-error-when-root-patching) for troubleshooting.
|
||||
|
||||
## Why is my system slow?
|
||||
|
||||
This can mean many things. Firstly, newer operating systems are harder to run and can appear more slow.
|
||||
|
||||
However, if your system is being **really** slow and you have no transparency in Dock and menubar, this typically indicates that root patches are not installed and as such there is no acceleration. Make sure to install root patches to get proper drivers and functionality. Refer to [Applying post install volume patches](https://dortania.github.io/OpenCore-Legacy-Patcher/POST-INSTALL.html#applying-post-install-volume-patches) and the [Troubleshooting](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html) section for more information.
|
||||
|
||||
Patches can also break if automatic updates are enabled and an update modifies the system volume, refer to [System version mismatch error when root patching](https://dortania.github.io/OpenCore-Legacy-Patcher/TROUBLESHOOTING.html#system-version-mismatch-error-when-root-patching) for more information.
|
||||
|
||||
## Crashing in random places
|
||||
|
||||
There are two rather common things that can cause weird crashing. First is a process called "mediaanalysisd" on 3802-based systems* and secondly FeatureUnlock. You can try disabling these settings in OCLP to try and gain higher stability.
|
||||
|
||||
Be advised that by disabling FeatureUnlock, you will lose some macOS functionality. The features enabled by FeatureUnlock are listed [here](https://github.com/acidanthera/FeatureUnlock).
|
||||
|
||||
*3802 systems include:
|
||||
* NVIDIA
|
||||
* Kepler (600-800 series GPUs)
|
||||
* Intel
|
||||
* Ivy Bridge (3rd generation, HD 4000 series GPUs)
|
||||
* Haswell (4th generation, HD/Iris 4000-5000 series GPUs)
|
||||
|
||||
These GPUs are typically met in systems from 2012-2015.
|
||||
|
||||
|
||||
## Why isn't iPhone Mirroring working?
|
||||
|
||||
iPhone Mirroring requires a T2 chip, which means it will not be available on OCLP patched systems. The connection fails due to failure to establish T2 attestation.
|
||||
|
||||
## Where is Apple Intelligence?
|
||||
|
||||
Apple Intelligence requires Neural Engine, which is only found in Apple Silicon chips.
|
||||
|
||||
@@ -6,4 +6,4 @@ OpenCore Legacy Patcher itself is actually quite a "dumb" program. It essentiall
|
||||
|
||||
To understand a bit more of how OpenCore is able to revive older Macs in such a native-like way, we need to go over *how* OpenCore works with your Mac:
|
||||
|
||||

|
||||

|
||||
|
||||
18
docs/ICNS.md
@@ -27,12 +27,12 @@ To generate custom OpenCore icons, you'll need the following:
|
||||
* ResetNVRAM — Reset NVRAM system action or tool (128x128).
|
||||
* Shell — Entry with UEFI Shell name for e.g. OpenShell (128x128).
|
||||
* Tool — Any other tool (128x128).
|
||||
|
||||
|
||||
Note, for each image we recommend having one of double the size. This ensures that icons are scaled correctly since .icns support dedicated images depending on HiDPI or not.
|
||||
|
||||
Once you have a custom image you want to use(for example, as a background), download the [latest release of OpenCorePkg](https://github.com/acidanthera/OpenCorePkg/releases) and enter the `Utilities/icnspack/` folder:
|
||||
|
||||

|
||||

|
||||
|
||||
Now `cd` to this folder in terminal and run the following:
|
||||
|
||||
@@ -42,7 +42,7 @@ Now `cd` to this folder in terminal and run the following:
|
||||
|
||||
Once done, you'll see your custom icon generated in `icnspack`'s folder:
|
||||
|
||||

|
||||

|
||||
|
||||
# Custom Mac Boot Picker icons
|
||||
|
||||
@@ -59,15 +59,15 @@ To generate legacy icons, you'll need the following:
|
||||
|
||||
Head to [developer.apple's More Downloads page](https://developer.apple.com/download/more/) and search for `Graphics Tools` that is supported by your OS(note for 10.6 and older, the app is hidden inside `Developer Tools`):
|
||||
|
||||

|
||||

|
||||
|
||||
Once downloaded, open the disk image and you'll find Icon Composer.app:
|
||||
|
||||

|
||||

|
||||
|
||||
Now run the app and simply drag the images to each section as so:
|
||||
|
||||

|
||||

|
||||
|
||||
Now save and export the new icns file.
|
||||
|
||||
@@ -79,7 +79,7 @@ To install, please ensure that Vault was disabled when you built OpenCore. If yo
|
||||
|
||||
Now that you've verified that you can edit OpenCore safely, you'll need to mount the drive that OpenCore is stored on. To do this, download [MountEFI](https://github.com/corpnewt/MountEFI) and run it:
|
||||
|
||||

|
||||

|
||||
|
||||
Select the drive you installed OpenCore to and mount it.
|
||||
|
||||
@@ -90,7 +90,7 @@ Select the drive you installed OpenCore to and mount it.
|
||||
|
||||
Head to `EFI/OC/Resources/Image/` on your drive and you'll see all the custom icons. For Background.icns, we need to ensure the file matches the theme OpenCore has set so we add the prefix `Modern` to it:
|
||||
|
||||

|
||||

|
||||
|
||||
Now reboot and you should see your updated icon(s)!
|
||||
|
||||
@@ -98,6 +98,6 @@ Now reboot and you should see your updated icon(s)!
|
||||
|
||||
Updating the Mac Boot Picker icons is actually quite simple. On the root of your drive, simply drop the icon into the root of the drive with the name `.VolumeIcon.icns`
|
||||
|
||||

|
||||

|
||||
|
||||
Now reboot and you'll see the new icon!
|
||||
|
||||
@@ -2,50 +2,36 @@
|
||||
|
||||
This document is centered around downloading and writing the macOS installer to a USB drive. If you're already familiar with how to do this, you can skip this section.
|
||||
|
||||
* Note: 16GB+ USB drive will be required for the installer
|
||||
* Note: A 32GB drive is recommended, later versions of Sonoma and Sequoia cannot fit installer and patches to a 16GB disk. 16GB drive may work for older versions.
|
||||
|
||||
## Creating the installer
|
||||
|
||||
With OpenCore Legacy Patcher, our new GUI includes a download menu for macOS installers. So to start off, you'll want to grab our app:
|
||||
To start off, you'll want to grab the app:
|
||||
|
||||
* [OpenCore Legacy Patcher Release Apps](https://github.com/dortania/OpenCore-Legacy-Patcher/releases)
|
||||
|
||||
For this guide, we'll be using the standard OpenCore-Patcher (GUI).
|
||||
Once downloaded, open the app and you should be greeted by the main menu.
|
||||
|
||||
Once downloaded, open the app and you should be greeted by this menu:
|
||||
First, we'll want to select the "Create macOS Installer" button. This will present you with 2 options.
|
||||
|
||||

|
||||
For this example, we'll assume you'll need an installer. Select the "Download macOS installer" to get you a list of installers. Click to download the version you want.
|
||||
|
||||
First, we'll want to select the "Create macOS Installer" button. This will present you with 2 options:
|
||||
| Main menu | Installer creation menu | Available installers |
|
||||
| :--- | :--- | --- |
|
||||
|  |  |  |
|
||||
|
||||

|
||||
|
||||
For this example, we'll assume you'll need an installer. Selecting this option will download Apple's Installer Catalogs and build a list for you to choose:
|
||||
|
||||
| Downloading | Listed Installers | Unsupported Installer |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  | 
|
||||
|
||||
Since the patcher officially supports Big Sur and newer for patching, only those entires will be shown. For ourselves, we'll select macOS 12 as that's the latest public release at the time of writing. This will download and install the macOS installer to your applications folder.
|
||||
|
||||
* Note that some machines (namely 2012 and older) may not be currently supported on macOS Ventura. If you see this prompt, you'll need to use an older version of macOS.
|
||||
|
||||
| Downloading the Installer | Requesting to install | Finished Installing |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
Once finished, you can proceed to write the installer onto a USB drive.
|
||||
Once the download is finished, you can proceed to write the installer onto a USB drive.
|
||||
|
||||
* Note: The entire USB drive will be formatted
|
||||
|
||||
| Select Downloaded Installer | Select disk to format |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
Now the patcher will start the installer flashing!
|
||||
|
||||
| Flashing | Success Prompt | Finished Flashing |
|
||||
| :--- | :--- |
|
||||
|  |  |  |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
# Once finished, head to [Building and installing OpenCore](./BUILD.md)
|
||||
|
||||
@@ -18,6 +18,8 @@ This patcher is made of multiple external applications from different people and
|
||||
* [telemetrap](https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/post-28447707) - Syncretic
|
||||
* [SurPlus](https://github.com/reenigneorcim/SurPlus) - Syncretic
|
||||
* [VMM Patch Set](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/4a8f61a01da72b38a4b2250386cc4b497a31a839/payloads/Config/config.plist#L1222-L1281) - parrotgeek1
|
||||
* AMFIPass - Dhinak G
|
||||
* Apple Binaries - Apple Inc.
|
||||
* All other patches - respective authors
|
||||
|
||||
Remaining files within OpenCore Legacy Patcher are copyrighted 2020-2022 Mykola Grymalyuk & Dhinak G. For integration into other projects, please request written permission.
|
||||
The remaining files within the OpenCore Legacy Patcher repository are distributed under the [BSD 4-Clause license](https://github.com/dortania/OpenCore-Legacy-Patcher/blob/main/LICENSE.txt).
|
||||
|
||||
249
docs/MODELS.md
@@ -1,13 +1,26 @@
|
||||
# Supported Models
|
||||
|
||||
Any hardware supporting SSE4.1 CPU and 64-Bit firmware work on this patcher. To check your hardware model, run the following command on the applicable machine in the terminal:
|
||||
### Application requirements
|
||||
The patcher application requires **OS X Yosemite 10.10** or later to run.
|
||||
* **OS X El Capitan 10.11** or later is required to make installers for macOS Ventura and later.
|
||||
|
||||
```bash
|
||||
system_profiler SPHardwareDataType | grep 'Model Identifier'
|
||||
```
|
||||
The patcher is designed to target **macOS Big Sur 11.x to macOS Sequoia 15.x**.
|
||||
* Other versions may work, albeit in a broken state. No support is provided for any version outside of the above.
|
||||
|
||||
The below table will list all supported and unsupported functions of the patcher currently:
|
||||
-------
|
||||
|
||||
Any Intel-based Mac listed below can install and make use of OpenCore Legacy Patcher. To check your hardware model, open System Information and look for the `Model Identifier` key.
|
||||
* This applies even if Apple supports the model natively.
|
||||
* OpenCore Legacy Patcher does not support PowerPC- or Apple Silicon-based Macs.
|
||||
* If your model is not listed below, it is not supported by this patcher.
|
||||
|
||||
::: warning Note
|
||||
It is **extremely recommended** to update your Mac to its latest native version before using OpenCore Legacy Patcher, to ensure you're on the highest firmware.
|
||||
:::
|
||||
|
||||
|
||||
|
||||
The below tables can be used to reference issues with a particular model, and see which OS would work best on your machine.
|
||||
* [MacBook](#macbook)
|
||||
* [MacBook Air](#macbook-air)
|
||||
* [MacBook Pro](#macbook-pro)
|
||||
@@ -16,146 +29,130 @@ The below table will list all supported and unsupported functions of the patcher
|
||||
* [Mac Pro](#mac-pro)
|
||||
* [Xserve](#xserve)
|
||||
|
||||
Regarding OS support, see below:
|
||||
|
||||
* Machines listing `YES - Ventura and older` means they cannot run macOS Ventura at this time. Machines with only `YES` can run all of the supported macOS versions offered by OpenCore Legacy Patcher.
|
||||
|
||||
| Support Entry | Supported OSes | Description | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| HostOS | macOS 10.9 - macOS 13 | Refers to OSes where running OpenCore-Patcher.app are supported | Supports 10.7+ if [Python 3.9 or higher](https://www.python.org/downloads/) is manually installed, simply run the `OpenCore-Patcher-GUI.command` located in the repo |
|
||||
| TargetOS | macOS 11 - macOS 13 | Refers to OSes that can be patched to run with OpenCore | May support 10.4 and newer (in a potentially broken state). No support provided. |
|
||||
|
||||
### MacBook
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacBook1,1 | Mid-2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
|
||||
| MacBook2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| MacBook3,1 | Late 2007 | ^^ | ^^ |
|
||||
| MacBook4,1 | Early 2008 | ^^ | - No GPU Acceleration in Mavericks and newer<br/>- No Keyboard and Trackpad<br/>- No USB |
|
||||
| MacBook5,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| MacBook5,2 | Early 2009 | ^^ | ^^ |
|
||||
| MacBook6,1 | Late 2009 | ^^ | ^^ |
|
||||
| MacBook7,1 | Mid-2010 | ^^ | ^^ |
|
||||
| MacBook8,1 | Mid-2015 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
| MacBook9,1 | Early 2016 | ^^ | ^^ |
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| :--- | :--- | :--- |
|
||||
| MacBook (13-inch, Aluminum, Late 2008) | `MacBook5,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)|
|
||||
| MacBook (13-inch, Early 2009)<br>MacBook (13-inch, Mid 2009) | `MacBook5,2` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Trackpad gestures are partially broken |
|
||||
| MacBook (13-inch, Late 2009) | `MacBook6,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
| MacBook (13-inch, Mid 2010) | `MacBook7,1` | ^^ |
|
||||
| MacBook (Retina, 12-inch, Early 2015) | `MacBook8,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| MacBook (Retina, 12-inch, Early 2016) | `MacBook9,1` | ^^ |
|
||||
| MacBook (Retina, 12-inch, 2017) | `MacBook10,1` | - Supported by OpenCore Legacy Patcher |
|
||||
|
||||
### MacBook Air
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacBookAir1,1 | Early 2008 | <span style="color:red"> NO </span> | Requires SSE4.1 CPU |
|
||||
| MacBookAir2,1 | Late 2008 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| MacBookAir3,1 | Late 2010 | ^^ | ^^ |
|
||||
| MacBookAir3,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir4,1 | Mid-2011 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))|
|
||||
| MacBookAir4,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir5,1 | Mid-2012 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
| MacBookAir5,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir6,1 | Mid-2013, Early 2014 | ^^ | ^^ |
|
||||
| MacBookAir6,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookAir7,1 | Early-2015, 2017 | ^^ | ^^ |
|
||||
| MacBookAir7,2 | ^^ | ^^ | ^^ |
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| :--- | :--- | :--- |
|
||||
| MacBook Air (13-inch, Late 2008)<br>MacBook Air (13-inch, Mid 2009) | `MacBookAir2,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)|
|
||||
| MacBook Air (11-inch, Late 2010) | `MacBookAir3,1` | ^^ |
|
||||
| MacBook Air (13-inch, Late 2010) | `MacBookAir3,2` | ^^ |
|
||||
| MacBook Air (11-inch, Mid 2011) | `MacBookAir4,1` | ^^ |
|
||||
| MacBook Air (13-inch, Mid 2011) | `MacBookAir4,2` | ^^ |
|
||||
| MacBook Air (11-inch, Mid 2012) | `MacBookAir5,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| MacBook Air (13-inch, Mid 2012) | `MacBookAir5,2` | ^^ |
|
||||
| MacBook Air (11-inch, Mid 2013)<br>MacBook Air (11-inch, Early 2014) | `MacBookAir6,1` | ^^ |
|
||||
| MacBook Air (13-inch, Mid 2013)<br>MacBook Air (13-inch, Early 2014) | `MacBookAir6,2` | ^^ |
|
||||
| MacBook Air (11-inch, Early 2015) | `MacBookAir7,1` | ^^ |
|
||||
| MacBook Air (13-inch, Early 2015)<br>MacBook Air (13-inch, 2017) | `MacBookAir7,2` | ^^ |
|
||||
| MacBook Air (Retina, 13-inch, 2018) | `MacBookAir8,1` | - Supported natively up to Sonoma<br>- Currently not supported on Sequoia due to T2 issues<br> |
|
||||
| MacBook Air (Retina, 13-inch, 2019) | `MacBookAir8,2` | ^^ |
|
||||
| MacBook Air (Retina, 13-inch, 2020) | `MacBookAir9,1` | Supported by Apple |
|
||||
|
||||
### MacBook Pro
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacBookPro1,1 | Early 2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
|
||||
| MacBookPro1,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro2,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| MacBookPro2,2 | Late 2006 | ^^ | ^^ |
|
||||
| MacBookPro3,1 | Mid-2007 | ^^ | Requires SSE4.1 CPU |
|
||||
| MacBookPro4,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| MacBookPro5,1 | Late 2008 | ^^ | ^^ |
|
||||
| MacBookPro5,2 | Early 2009 | ^^ | ^^ |
|
||||
| MacBookPro5,3 | Mid-2009 | ^^ | ^^ |
|
||||
| MacBookPro5,4 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro5,5 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro6,1 | Mid-2010 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))|
|
||||
| MacBookPro6,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro7,1 | ^^ | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| MacBookPro8,1 | Early 2011 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))|
|
||||
| MacBookPro8,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro8,3 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro9,1 | Mid-2012 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
| MacBookPro9,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro10,1 | Mid-2012, Early 2013 | ^^ | ^^ |
|
||||
| MacBookPro10,2 | Late 2012, Early 2013 | ^^ | ^^ |
|
||||
| MacBookPro11,1 | Late 2013, Mid-2014 | ^^ | ^^ |
|
||||
| MacBookPro11,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro11,3 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro11,4 | Mid 2015 | ^^ | ^^ |
|
||||
| MacBookPro11,5 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro12,1 | Early 2015 | ^^ | ^^ |
|
||||
| MacBookPro13,1 | Late 2016 | ^^ | ^^ |
|
||||
| MacBookPro13,2 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro13,3 | ^^ | ^^ | ^^ |
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| :--- | :--- | :--- |
|
||||
| MacBook Pro (15-inch, Early 2008)<br>MacBook Pro (17-inch, Early 2008) | `MacBookPro4,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)|
|
||||
| MacBook Pro (15-inch, Late 2008)<br>MacBook Pro (15-inch, Early 2009) | `MacBookPro5,1` | ^^ |
|
||||
| MacBook Pro (17-inch, Early 2009)<br>MacBook Pro (17-inch, Mid 2009) | `MacBookPro5,2` | ^^ |
|
||||
| MacBook Pro (15-inch, Mid 2009) | `MacBookPro5,3`<br>`MacBookPro5,4` | ^^ |
|
||||
| MacBook Pro (13-inch, Mid 2009) | `MacBookPro5,5` | ^^ |
|
||||
| MacBook Pro (17-inch, Mid 2010) | `MacBookPro6,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) |
|
||||
| MacBook Pro (15-inch, Mid 2010) | `MacBookPro6,2` | ^^ |
|
||||
| MacBook Pro (13-inch, Mid 2010) | `MacBookPro7,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
| MacBook Pro (13-inch, Early 2011)<br>MacBook Pro (13-inch, Late 2011) | `MacBookPro8,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) |
|
||||
| MacBook Pro (15-inch, Early 2011)<br>MacBook Pro (15-inch, Late 2011) | `MacBookPro8,2` | ^^ |
|
||||
| MacBook Pro (17-inch, Early 2011)<br> | `MacBookPro8,3` | ^^ |
|
||||
| MacBook Pro (15-inch, Mid 2012) | `MacBookPro9,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| MacBook Pro (13-inch, Mid 2012) | `MacBookPro9,2` | ^^ |
|
||||
| MacBook Pro (Retina, 15-inch, Mid 2012)<br>MacBook Pro (Retina, 15-inch, Early 2013) | `MacBookPro10,1` | ^^ |
|
||||
| MacBook Pro (Retina, 13-inch, Late 2012)<br>MacBook Pro (Retina, 13-inch, Early 2013) | `MacBookPro10,2` | ^^ |
|
||||
| MacBook Pro (Retina, 13-inch, Late 2013)<br>MacBook Pro (Retina, 13-inch, Mid 2014) | `MacBookPro11,1` | ^^ |
|
||||
| MacBook Pro (Retina, 15-inch, Late 2013)<br>MacBook Pro (Retina, 15-inch, Mid 2014) | `MacBookPro11,2`<br>`MacBookPro11,3` | ^^ |
|
||||
| MacBook Pro (Retina, 15-inch, Mid 2015) | `MacBookPro11,4`<br>`MacBookPro11,5` | ^^ |
|
||||
| MacBook Pro (Retina, 13-inch, Early 2015) | `MacBookPro12,1` | ^^ |
|
||||
| MacBook Pro (13-inch, 2016, 2 Thunderbolt 3 ports) | `MacBookPro13,1` | ^^ |
|
||||
| MacBook Pro (13-inch, 2016, 4 Thunderbolt 3 ports) | `MacBookPro13,2` | ^^ |
|
||||
| MacBook Pro (15-inch, 2016) | `MacBookPro13,3` | ^^ |
|
||||
| MacBook Pro (13-inch, 2017, 2 Thunderbolt 3 ports) | `MacBookPro14,1` | - Supported by OpenCore Legacy Patcher |
|
||||
| MacBook Pro (13-inch, 2017, 4 Thunderbolt 3 ports) | `MacBookPro14,2` | ^^ |
|
||||
| MacBook Pro (15-inch, 2017) | `MacBookPro14,3` | - [Legacy Metal (macOS 14+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| MacBook Pro (13-inch, 2018, 4 Thunderbolt 3 ports)<br>MacBook Pro (13-inch, 2019, 4 Thunderbolt 3 ports) | `MacBookPro15,2` | - Supported by Apple |
|
||||
| MacBook Pro (15-inch, 2018)<br>MacBook Pro (15-inch, 2019) | `MacBookPro15,1` | ^^ |
|
||||
| MacBook Pro (13-inch, 2019, 2 Thunderbolt 3 ports) | `MacBookPro15,4` | ^^ |
|
||||
| MacBook Pro (16-inch, 2019) | `MacBookPro16,1`<br>`MacBookPro16,4` | ^^ |
|
||||
| MacBook Pro (13-inch, 2020, 4 Thunderbolt 3 ports) | `MacBookPro16,2` | ^^ |
|
||||
| MacBook Pro (13-inch, 2020, 2 Thunderbolt 3 ports) | `MacBookPro16,3` | ^^ |
|
||||
|
||||
### Mac mini
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| Macmini1,1 | Early 2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
|
||||
| Macmini2,1 | Mid-2007 | ^^ | 32-Bit Firmware limitation |
|
||||
| Macmini3,1 | Early 2009 | <span style="color:#30BCD5"> YES </span> | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| Macmini4,1 | Mid-2010 | ^^ | ^^ |
|
||||
| Macmini5,1 | Mid-2011 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))|
|
||||
| Macmini5,2 | ^^ | ^^ | ^^ |
|
||||
| Macmini5,3 | ^^ | ^^ | ^^ |
|
||||
| Macmini6,1 | Late 2012 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
| Macmini6,2 | ^^ | ^^ | ^^ |
|
||||
| Macmini7,1 | Mid-2014 | ^^ | ^^ |
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| :--- | :--- | :--- |
|
||||
| Mac mini (Early 2009) | `Macmini3,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
| Mac mini (Mid 2010) | `Macmini4,1` | ^^ |
|
||||
| Mac mini (Mid 2011) | `Macmini5,1`<br>`Macmini5,2`<br>`Macmini5,3` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108) |
|
||||
| Mac mini (Late 2012) | `Macmini6,1`<br>`Macmini6,2` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| Mac mini (Late 2014) | `Macmini7,1` | ^^ |
|
||||
| Mac mini (Late 2018) | `Macmini8,1` | - Supported by Apple |
|
||||
|
||||
### iMac
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| iMac4,1 | Early 2006 | <span style="color:red"> NO </span> | 32-Bit CPU limitation |
|
||||
| iMac4,2 | Mid-2006 | ^^ | ^^ |
|
||||
| iMac5,1 | Late 2006 | ^^ | 32-Bit Firmware limitation |
|
||||
| iMac5,2 | ^^ | ^^ | ^^ |
|
||||
| iMac6,1 | ^^ | ^^ | ^^ |
|
||||
| iMac7,1 | Mid-2007 | <span style="color:#30BCD5"> YES </span> | - Requires an [SSE4.1 CPU Upgrade](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)<br/>- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/>- Stock Bluetooth 2.0 card non-functional<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| iMac8,1 | Early 2008 | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))<br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| iMac9,1 | Early 2009 | ^^ | ^^ |
|
||||
| iMac10,1 | Late 2009 | ^^ | - GPU is socketed, [recommend upgrading to Metal GPU](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857) <br/>- GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)) <br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| iMac11,1 | ^^ | ^^ | - GPU Acceleration in Public Beta, see current issues ([#108](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108))|
|
||||
| iMac11,2 | Mid-2010 | ^^ | ^^ |
|
||||
| iMac11,3 | ^^ | ^^ | ^^ |
|
||||
| iMac12,1 | Mid-2011 | ^^ | ^^ |
|
||||
| iMac12,2 | ^^ | ^^ | ^^ |
|
||||
| iMac13,1 | Late 2012 | ^^ | <span style="color:green"> Everything is supported</span> |
|
||||
| iMac13,2 | ^^ | ^^ | ^^ |
|
||||
| iMac13,3 | ^^ | ^^ | ^^ |
|
||||
| iMac14,1 | Late 2013 | ^^ | ^^ |
|
||||
| iMac14,2 | ^^ | ^^ | ^^ |
|
||||
| iMac14,3 | ^^ | ^^ | ^^ |
|
||||
| iMac14,4 | Mid-2014 | ^^ | ^^ |
|
||||
| iMac15,1 | Late 2014, Mid-2015 | ^^ | ^^ |
|
||||
| iMac16,1 | Late 2014, Mid-2015 | ^^ | ^^ |
|
||||
| iMac16,2 | Late 2014, Mid-2015 | ^^ | ^^ |
|
||||
| iMac17,1 | Late 2015, Early-2016 | ^^ | ^^ |
|
||||
|
||||
* For iMac10,1 through iMac12,x, we highly recommend users upgrade the GPU to a Metal supported model. See here for more information: [iMac late 2009 to mid-2011 Graphics Card Upgrade Guide](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857)
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| :--- | :--- | :--- |
|
||||
| iMac (20-inch, Mid 2007)<br>iMac (24-inch, Mid 2007) | `iMac7,1` | - [Requires SSE4.1 CPU](https://lowendmac.com/2018/penryn-t9300-9500-cpu-upgrades-for-the-2007-imac/)<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Remove stock Bluetooth to prevent panics |
|
||||
| iMac (20-inch, Early 2008)<br>iMac (24-inch, Early 2008) | `iMac8,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
| iMac (20-inch, Early 2009)<br>iMac (24-inch, Early 2009)<br>iMac (20-inch, Mid 2009) | `iMac9,1` | - [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- [Recommend upgrading to Metal GPU](https://forums.macrumors.com/threads/2011-imac-graphics-card-upgrade.1596614/?post=17425857#post-17425857) |
|
||||
| iMac (21.5-inch, Late 2009)<br>iMac (27-inch, Late 2009)| `iMac10,1` | ^^ |
|
||||
| iMac (27-inch, Late 2009) | `iMac11,1` | ^^ |
|
||||
| iMac (21.5-inch, Mid 2010) | `iMac11,2` | ^^ |
|
||||
| iMac (27-inch, Mid 2010) | `iMac11,3` | ^^ |
|
||||
| iMac (21.5-inch, Mid 2011)<br>iMac (21.5-inch, Late 2011) | `iMac12,1` | ^^ |
|
||||
| iMac (27-inch, Mid 2011) | `iMac12,2` | ^^ |
|
||||
| iMac (21.5-inch, Late 2012) | `iMac13,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| iMac (27-inch, Late 2012) | `iMac13,2` | ^^ |
|
||||
| iMac (21.5-inch, Early 2013) | `iMac13,3` | ^^ |
|
||||
| iMac (21.5-inch, Late 2013) | `iMac14,1` | ^^ |
|
||||
| iMac (27-inch, Late 2013) | `iMac14,2`<br>`iMac14,3` | ^^ |
|
||||
| iMac (21.5-inch, Mid 2014) | `iMac14,4` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, Late 2014)<br>iMac (Retina 5K, 27-inch, Mid 2015) | `iMac15,1` | ^^ |
|
||||
| iMac (21.5-inch, Late 2015) | `iMac16,1` | ^^ |
|
||||
| iMac (Retina 4K, 21.5-inch, Late 2015) | `iMac16,2` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, Late 2015) | `iMac17,1` | ^^ |
|
||||
| iMac (21.5-inch, 2017) | `iMac18,1` | - Supported by OpenCore Legacy Patcher |
|
||||
| iMac (Retina 4K, 21.5-inch, 2017) | `iMac18,2` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, 2017) | `iMac18,3` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, 2019) | `iMac19,1` | - Supported by Apple |
|
||||
| iMac (Retina 4K, 21.5-inch, 2019) | `iMac19,2` | ^^ |
|
||||
| iMac (Retina 5K, 27-inch, 2020) | `iMac20,1`<br>`iMac20,2` | ^^ |
|
||||
| iMac Pro (2017) | `iMacPro1,1` | ^^ |
|
||||
|
||||
### Mac Pro
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| MacPro1,1 | Mid-2006 | <span style="color:red"> NO </span> | 32-Bit Firmware limitation |
|
||||
| MacPro2,1 | Mid-2007 | ^^ | ^^ |
|
||||
| MacPro3,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issesues/1021)) <br/>- Potential boot issues with stock Bluetooth card, recommend removing to avoid kernel panics |
|
||||
| MacPro4,1 | Early 2009 | ^^ | - Everything is supported as long as GPU is Metal capable <br/> - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issesues/1021))|
|
||||
| MacPro5,1 | Mid-2010, Mid-2012 | ^^ | ^^ |
|
||||
| MacPro6,1 | Late 2013 | ^^ | - CPU Power Management currently unsupported<br/> - No DRM support |
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| :--- | :--- | :--- |
|
||||
| Mac Pro (Early 2008) | `MacPro3,1` | - [Recommend upgrade to Metal GPU](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)<br>- Remove stock Bluetooth to prevent panics |
|
||||
| Mac Pro (Early 2009) | `MacPro4,1` | - [Recommend upgrade to Metal GPU](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021) |
|
||||
| Mac Pro (Mid 2010)<br>Mac Pro (Mid 2012) | `MacPro5,1` | ^^ |
|
||||
| Mac Pro (Late 2013) | `MacPro6,1` | - [Legacy Metal (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008) |
|
||||
| Mac Pro (2019) | `MacPro7,1` | - Supported by Apple |
|
||||
|
||||
### Xserve
|
||||
|
||||
| SMBIOS | Year | Supported | Comment |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| Xserve1,1 | Mid-2006 | <span style="color:red"> NO </span> | 32-Bit Firmware limitation |
|
||||
| Xserve2,1 | Early 2008 | <span style="color:#30BCD5"> YES </span> | - UHCI/OHCI support in Public Beta, see current issues ([#1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021))|
|
||||
| Xserve3,1 | Early 2009 | ^^ | ^^ |
|
||||
| Model Name | Identifier | Tagged Issues |
|
||||
| :--- | :--- | :--- |
|
||||
| Xserve (Early 2008) | `Xserve2,1` | - Recommend upgrade to Metal GPU<br>- [non-Metal GPU (macOS 11+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)<br>- [USB 1.1 (macOS 13+)](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
| Xserve (Early 2009) | `Xserve3,1` | ^^ |
|
||||
|
||||
# Once you've verified your hardware is supported, head to [Download and build macOS Installers](./INSTALLER.md)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||

|
||||
# macOS Monterey Support
|
||||
|
||||

|
||||
|
||||
With OpenCore Legacy Patcher v0.1.7 and newer, we've implemented beta macOS Monterey support for users. Please note that Apple has dropped a lot of hardware with this release as well as broken many of our previous patch sets. This page will be used to inform users regarding current issues and will be updated as new patch sets are developed and added to our patcher.
|
||||
|
||||
|
||||
@@ -139,13 +139,17 @@ Below is a rundown of the main logic that OpenCore Legacy Patcher uses to gain n
|
||||
* Reason: Enables Content Caching when using VMM spoofing
|
||||
* Logic: Adds args to NVRAM
|
||||
* Models: Any model using VMM spoofing
|
||||
* `amfi=0x80`
|
||||
* Reason: Disables Apple Mobile File Integrity to allow for root patches
|
||||
* Logic: Adds args to NVRAM
|
||||
* Models: Any model that requires unsigned root patches
|
||||
|
||||
### UEFI -> ProtocolOverrides
|
||||
|
||||
* GopPassThrough
|
||||
* Reason: Used for proper output on machines with UGA firmware but GOP GPU
|
||||
* Logic: Provide GOP protocol instances on top of UGA protocol instances
|
||||
* Models: MacPro3,1, MacBook4,1 iMac7,1-8,1
|
||||
* Models: MacPro3,1, iMac7,1-8,1
|
||||
|
||||
:::
|
||||
|
||||
@@ -184,6 +188,16 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
* RestrictEvents
|
||||
* Reason: Disables memory errors on MacPro7,1
|
||||
* Models: Mac Pros and Xserves
|
||||
* CryptexFixup
|
||||
* Reason: Installs non AVX2.0 Cryptex on non AVX2.0 CPUs
|
||||
* Models: All CPUs Ivy Bridge and older
|
||||
* AutoPkgInstaller
|
||||
* Reason: Allows for automatic root patching
|
||||
* NVMeFix
|
||||
* Reason: Fixes 3rd party NVMe support
|
||||
* RSRHelper
|
||||
* Reason: Fixes Rapid Security Response Support on root patched installs
|
||||
*
|
||||
|
||||
### Ethernet
|
||||
|
||||
@@ -197,6 +211,23 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
* Reason: Inject old Broadcom Ethernet kext to resolve networking in Big Sur
|
||||
* Logic: Patch out conflicting symbols to not collide existing BCM5701Ethernet
|
||||
* Models: 2011 and older Broadcom Ethernet require
|
||||
* Intel82574L
|
||||
* Reason: Resolves Ethernet Support on MacPros
|
||||
* Models: MacPro3,1 - 5,1
|
||||
* CatalinaIntelI210Ethernet
|
||||
* Reason: Fixes Intel i210/i225 NIC support on pre-Ivy Macs
|
||||
* AppleIntel8254XEthernet
|
||||
* Reason: Resolves Ethernet Support on MacPros
|
||||
* Models: MacPro3,1 - 5,1
|
||||
|
||||
### Firewire
|
||||
|
||||
* IOFireWireFamily
|
||||
* Reason: Allows for FireWire Boot Support
|
||||
* IOFireWireSBP2
|
||||
* Reason: Allows for FireWire Boot Support
|
||||
* IOFireWireSerialBusProtoColTransport
|
||||
* Reason: Allows for FireWire Boot Support
|
||||
|
||||
### Maps
|
||||
|
||||
@@ -215,14 +246,12 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
|
||||
### Wifi
|
||||
|
||||
* IO80211HighSierra
|
||||
* Reason: Re-inject Atheros wifi drivers from High Sierra
|
||||
* Logic: Patch out conflicting symbols to not collide existing IO80211Family
|
||||
* Models: Atheros cards
|
||||
* IO80211Mojave
|
||||
* Reason: Re-inject Broadcom wifi drivers from Mojave
|
||||
* Logic: Patch out conflicting symbols to not collide existing IO80211Family
|
||||
* Models: BCM94322
|
||||
* IO80211ElCap
|
||||
* Reason: Re-inject WiFi drivers from El Capitan
|
||||
* Models: BCM94328, BCM94322 and Atheros chipsets
|
||||
* corecaptureElCap.kext
|
||||
* Reason: Re-inject WiFi drivers from El Capitan
|
||||
* Models: BCM94328, BCM94322 and Atheros chipsets
|
||||
|
||||
### Misc
|
||||
|
||||
@@ -238,6 +267,41 @@ Below is an explanation of what Kexts OpenCore Legacy Patcher will inject into m
|
||||
* SMC-Spoof
|
||||
* Reason: Spoofs SMC version to 9.9999
|
||||
* Models: All models require when spoofing minimal or higher
|
||||
* AppleRAIDCard
|
||||
* Adds AppleRaidCard Support for Xserves
|
||||
* AMDGPUWakeHandler
|
||||
* Reason: Adds Software Based Demux for 2011 15/17 Macbook Pros
|
||||
* AppleIntelCPUPowerManagement and AppleIntelCPUPowerManagementClient
|
||||
* Reason: Restores Ivy Bridge and older CPU Power Management
|
||||
* AppleUSBTopCase
|
||||
* Reason: Restore USB Keyboard support on Mac OS Ventura
|
||||
* AppleUSBMultitouch and AppleUSBTrackpad
|
||||
* Reason: Restore USB Trackpad support on Mac OS Ventura
|
||||
* ASPP-Override
|
||||
* Reason: Forces ACPI_SMC_PlatformPlugin to outmatch X86PlatformPlugin and disable firmware throttling
|
||||
* BacklightInjector
|
||||
* Reason: Fixes Brightness in iMacs with upgraded GPUs
|
||||
* BigSurSDXC
|
||||
* Reason: Restores SDXC Support in Pre Ivy-Bridge Macs
|
||||
* Bluetooth-spoof
|
||||
* Reason: Spoofs legacy Bluetooth to work on Monterey and newer
|
||||
* Innie
|
||||
* Reason: Makes all PCIe drives appear internal
|
||||
* Models: MacPro3,1 and newer & Xserve3,1 and newer
|
||||
* KDKlessWorkaround
|
||||
* Reason: Helps with Mac os updates on KDKless patched systems
|
||||
* LegacyUSBVieoSupport
|
||||
* Reason: Fixes Legacy USB iSight support
|
||||
* MonteAHCIPort
|
||||
* Reason: Fixes SSD support for stock SSD found in MacBookAir6,x
|
||||
* NoAVXFSCompressionTypeZlib
|
||||
* Reason: Prevents AVXFSCompressionTypeZlib crash on pre AVX1.0 systems in 12.4+
|
||||
* SimpleMSR
|
||||
* Reason: Disables BD PROCHOT to prevent firmware throttling on Nehalem+ MacBooks
|
||||
* LegacyKeyboardInjector
|
||||
* Reason: Fixes function keys on MacBook5,2
|
||||
|
||||
|
||||
:::
|
||||
|
||||
## On-Disk Patches
|
||||
@@ -286,6 +350,15 @@ Applicable for BCM94328, BCM94322 and Atheros Wifi cards
|
||||
|
||||
* OpenCL (libCLVMNVPTXPlugin.dylib, NVPTX.dylib)
|
||||
* Reason: Re-add Kepler hardware acceleration support
|
||||
* Metal
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a Metal downgrade to 13.2.1
|
||||
|
||||
### PrivateFrameworks
|
||||
|
||||
* MTLCompiler
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a MTLCompiler downgrade to 13.2.1
|
||||
* GPUCompiler
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a GPUCompiler downgrade to 13.2.1
|
||||
|
||||
:::
|
||||
|
||||
@@ -306,6 +379,10 @@ Applicable for BCM94328, BCM94322 and Atheros Wifi cards
|
||||
|
||||
* AppleGVA/AppleGVACore
|
||||
* Reason: Enable DRM support
|
||||
* MTLCompiler
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a MTLCompiler downgrade to 13.2.1
|
||||
* GPUCompiler
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a GPUCompiler downgrade to 13.2.1
|
||||
|
||||
### Frameworks
|
||||
|
||||
@@ -313,12 +390,117 @@ Applicable for BCM94328, BCM94322 and Atheros Wifi cards
|
||||
* Reason: Re-add Ivy Bridge hardware acceleration support
|
||||
* WebKit (com.apple.WebProcess.sb)
|
||||
* Reason: Re-add Ivy Bridge Safari rendering support
|
||||
* Metal
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a Metal downgrade to 13.2.1
|
||||
:::
|
||||
|
||||
::: details non-Metal Graphics Acceleration Patches (11.0+)
|
||||
::: details Intel Haswell Graphics Acceleration Patches (13.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
* AppleIntelFramebufferAzul.kext
|
||||
* AppleIntelHD5000Graphics.kext
|
||||
* AppleIntelHD5000GraphicsGLDriver.bundle
|
||||
* AppleIntelHD5000GraphicsMTLDriver.bundle
|
||||
* AppleIntelHD5000GraphicsVADriver.bundle
|
||||
* AppleIntelHSWVA.bundle
|
||||
* AppleIntelGraphicsShared.bundle
|
||||
|
||||
### Frameworks
|
||||
|
||||
* Metal
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a Metal downgrade to 13.2.1
|
||||
|
||||
### PrivateFrameworks
|
||||
|
||||
* MTLCompiler
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a MTLCompiler downgrade to 13.2.1
|
||||
* GPUCompiler
|
||||
* Reason: 3802 based GPU's broken by 13.3, requiring a GPUCompiler downgrade to 13.2.1
|
||||
|
||||
:::
|
||||
|
||||
::: details Intel Broadwell Graphics Acceleration Patches (13.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
* AppleIntelBDWGraphics.kext
|
||||
* AppleIntelBDWGraphicsFramebuffer.kext
|
||||
* AppleIntelBDWGraphicsGLDriver.bundle
|
||||
* AppleIntelBDWGraphicsMTLDriver.bundle
|
||||
* AppleIntelBDWGraphicsVADriver.bundle
|
||||
* AppleIntelBDWGraphicsVAME.bundle
|
||||
* AppleIntelGraphicsShared.bundle
|
||||
|
||||
|
||||
|
||||
:::
|
||||
|
||||
::: details Intel Skylake Graphics Acceleration Patches (13.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
* AppleIntelSKLGraphics.kext
|
||||
* AppleIntelSKLGraphicsFramebuffer.kext
|
||||
* AppleIntelSKLGraphicsGLDriver.bundle
|
||||
* AppleIntelSKLGraphicsMTLDriver.bundle
|
||||
* AppleIntelSKLGraphicsVADriver.bundle
|
||||
* AppleIntelSKLGraphicsVAME.bundle
|
||||
* AppleIntelGraphicsShared.bundle
|
||||
|
||||
|
||||
:::
|
||||
|
||||
::: details AMD Legacy Vega Graphics Acceleration Patches (13.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
* AMDRadeonX5000.kext
|
||||
* AMDRadeonVADriver2.bundle
|
||||
* AMDRadeonX5000GLDriver.bundle
|
||||
* AMDRadeonX5000MTLDriver.bundle
|
||||
* AMDRadeonX5000Shared.bundle
|
||||
* AMDShared.bundle
|
||||
|
||||
:::
|
||||
|
||||
::: details AMD Legacy Polaris Graphics Acceleration Patches (13.0+)
|
||||
|
||||
### Extensions
|
||||
|
||||
* AMDRadeonX4000.kext
|
||||
* AMDRadeonX4000HWServices.kext
|
||||
* AMDRadeonVADriver2.bundle
|
||||
* AMDRadeonX4000GLDriver.bundle
|
||||
* AMDMTLBronzeDriver.bundle
|
||||
* AMDShared.bundle
|
||||
|
||||
:::
|
||||
|
||||
::: details AMD Legacy GCN Graphics Acceleration Patches
|
||||
|
||||
### Extensions
|
||||
|
||||
* AMD7000Controller.kext
|
||||
* AMD8000Controller.kext
|
||||
* AMD9000Controller.kext
|
||||
* AMD9500Controller.kext
|
||||
* AMD10000Controller.kext
|
||||
* AMDRadeonX4000.kext
|
||||
* AMDRadeonX4000HWServices.kext
|
||||
* AMDFramebuffer.kext
|
||||
* AMDSupport.kext
|
||||
* AMDRadeonVADriver.bundle
|
||||
* AMDRadeonVADriver2.bundle
|
||||
* AMDRadeonX4000GLDriver.bundle
|
||||
* AMDMTLBronzeDriver.bundle
|
||||
* AMDShared.bundle
|
||||
|
||||
|
||||
|
||||
|
||||
::: details non-Metal Graphics Acceleration Patches (11.0+)
|
||||
|
||||
#### General Patches
|
||||
|
||||
* IOSurface.kext
|
||||
@@ -343,6 +525,19 @@ Applicable for BCM94328, BCM94322 and Atheros Wifi cards
|
||||
* 0x1ea59a - 0x1ea5b3: nop
|
||||
* Replace VSLGestalt to IOLockLock or any other known symbol of the same length.
|
||||
|
||||
* NVIDIA Web Drivers Binaries
|
||||
* GeForceWeb.kext
|
||||
* NVDAGF100HalWeb.kext
|
||||
* NVDAGK100HalWeb.kext
|
||||
* NVDAGM100HalWeb.kext
|
||||
* NVDAGP100HalWeb.kext
|
||||
* NVDAResmanWeb.kext
|
||||
* NVDAStartupWeb.kext
|
||||
* GeForceTeslaWeb.kext
|
||||
* NVDANV50HalTeslaWeb.kext
|
||||
* NVDAResmanTeslaWeb.kext
|
||||
* Reason: Allows for non-Metal Acceleration for NVIDIA Maxwell and Pascal GPUs
|
||||
|
||||
* AMD/ATI Binaries
|
||||
* AMD2400Controller.kext
|
||||
* AMD2600Controller.kext
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# Post-Installation
|
||||
|
||||
* [Booting without USB drive](#booting-without-usb-drive)
|
||||
* [Booting seamlessly without Verbose or OpenCore Picker](#booting-seamlessly-without-verbose-or-opencore-picker)
|
||||
* [Booting seamlessly without Boot Picker](#booting-seamlessly-without-boot-picker)
|
||||
* [SIP settings](#sip-settings)
|
||||
* [Applying Post Install Volume Patches](#applying-post-install-volume-patches)
|
||||
|
||||
## Booting without USB drive
|
||||
@@ -16,51 +17,73 @@ Once you've installed macOS through OpenCore, you can boot up and go through the
|
||||
|
||||
And voila! No more USB drive required.
|
||||
|
||||
## Booting seamlessly without Verbose or OpenCore Picker
|
||||
## Booting seamlessly without Boot Picker
|
||||
|
||||
To do this, run the OpenCore Patcher and head to Patcher Settings:
|
||||
To do this, run the OpenCore Patcher and head to Patcher Settings, then uncheck "Show OpenCore Bootpicker" on the Build tab:
|
||||
|
||||

|
||||
|
||||
Here you can change different patcher settings, however the main interest is:
|
||||
<div align="center">
|
||||
<img src="./images/OCLP-GUI-Settings-ShowPicker.png" alt="GUI Settings ShowPicker" width="600" />
|
||||
</div>
|
||||
|
||||
* Show Boot Picker
|
||||
|
||||
Once you've toggled them both off, build your OpenCore EFI once again and install to your desired drive. Now to show the OpenCore selector, you can simply hold down the "ESC" key while clicking on EFI boot, and then you can release the "ESC" key when you see the cursor arrow at the top left.
|
||||
Once you've toggled it off, build your OpenCore EFI once again and install to your desired drive. Now to show the OpenCore selector, you can simply hold down the "ESC" key while clicking on EFI boot, and then you can release the "ESC" key when you see the cursor arrow at the top left.
|
||||
|
||||
## Enabling SIP
|
||||
## SIP settings
|
||||
|
||||
For many users, SIP will be lowered by default on build. For Intel HD 4000 users, you may have noticed that SIP is partially disabled. This is to ensure full compatibility with macOS Monterey and allow seamless booting between it and older OSes. However for users who do not plan to boot Monterey, you can re-enable under Patcher Settings.
|
||||
|
||||
Note: Machines running macOS Ventura or systems with non-Metal GPUs cannot enable SIP outright, due to having a patched root volume. Enabling it will brick the installation.
|
||||
|
||||
| SIP Enabled | SIP Lowered (Root Patching) | SIP Disabled |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
SIP, or System Integrity Protection, needs to be lowered on systems where root patching is required to patch data on disk. This will vary between OS versions and the model in question. OCLP by default will determine the proper SIP options for the OS version and Mac model, in most cases the user has no need to touch these settings. However, this part explains how the SIP settings work in OCLP, where lowered SIP is needed and where full SIP could be enabled.
|
||||
|
||||
:::warning
|
||||
|
||||
If you're unsure whether you should enable SIP, leave it as-is. Systems where you have already ran the Post Install Root Patching cannot enable SIP without potentially breaking the current install.
|
||||
If you're unsure whether you should change the SIP settings, leave them as-is. Systems where you have already ran the Post Install Root Patching cannot enable SIP without potentially breaking the current install.
|
||||
|
||||
:::
|
||||
|
||||
SIP settings can be accessed from the Security tab shown in the images. To change SIP settings, make the changes here, return in main menu and rebuild OpenCore using the first option.
|
||||
|
||||
| SIP Enabled | SIP Lowered (Root Patching) | SIP Disabled |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
|
||||
In the cases where SIP can be enabled, manually enabling it is needed.
|
||||
|
||||
Easiest way to check whether you can fully enable SIP is the "Post Install Root Patch" section, if that section tells your system doesn't need patches (or you don't install the patches e.g. in case you don't need WiFi on a Mac Pro with upgraded GPU running Monterey) then it is safe to assume full SIP can be enabled.
|
||||
|
||||
**Ventura and newer**
|
||||
|
||||
All unsupported systems require lowered SIP.
|
||||
|
||||
**Monterey**
|
||||
|
||||
Majority of unsupported systems from 2013 onward can enable full SIP.
|
||||
|
||||
Pre-2012 systems, also known as "non-Metal", as well as NVIDIA Kepler and Intel HD 4000 GPUs require lowered SIP. Mac Pros also require lowered SIP for stock WiFi cards and stock GPUs (due to root patching) but if you do not need WiFi (or you plan to upgrade it) and you're running on an upgraded GPU, there is no need for root patching and as such SIP can be fully enabled.
|
||||
|
||||
**Big Sur**
|
||||
|
||||
All Metal capable systems from 2012 onward (incl. NVIDIA Kepler and Intel HD 4000) as well as Mac Pros with upgraded GPU can run with full SIP enabled.
|
||||
Non-Metal systems still require lowered SIP.
|
||||
|
||||
## Applying Post Install Volume Patches
|
||||
|
||||
:::warning
|
||||
|
||||
If you need to use Migration Assistant to bring over data to your new macOS install, it is **highly recommended** to avoid restoring from inside Setup Assistant and waiting to install root patches until after the transfer is complete. If root patches were automatically installed, you can use the options available in the OCLP app to remove them.
|
||||
|
||||
Using Migration Assistant while patches are installed can lead to an unbootable system, requiring a reinstall of macOS.
|
||||
|
||||
:::
|
||||
|
||||
Post Install Volume Patches, sometimes also called root patches, are patches that have to be installed to disk for some older Macs to gain back functionality.
|
||||
|
||||
OCLP v0.4.4 and higher include an autopatcher, which will automatically root patch your system but **only if the USB install media was created within OCLP.**
|
||||
OCLP will automatically root patch your system during a first time install **if the USB install media was created within OCLP.** Users will also be prompted to install these patches after macOS updates or whenever patches are not detected on the system. We recommend rebuilding OpenCore with the latest version of OCLP to take advantage of these new features.
|
||||
|
||||
Users with OCLP v0.4.4 or higher will also be prompted to install these patches after macOS updates or whenever patches are not detected on the system. We recommend rebuilding OpenCore with the latest version of OCLP to take advantage of these new features.
|
||||
Users can also see whether applicable patches have been installed, date and version the system was root patched with in the Post-Install Menu.
|
||||
|
||||
|
||||
|
||||
In OCLP v0.4.5 a new indicator was added to help users to see if, when and on what version the system was root patched. Note that the "Available patches" section above this does not track the status and will always show the patches that are available, whether they're installed or not.
|
||||
|
||||
| Automatic install prompt in 0.4.4+ | Last patched status in 0.4.5+ |
|
||||
| Automatic install prompt | Status |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
|  |  |
|
||||
|
||||
|
||||
|
||||
@@ -68,11 +91,27 @@ In OCLP v0.4.5 a new indicator was added to help users to see if, when and on wh
|
||||
|
||||
If you're using OCLP v0.4.3 or earlier, or need to run the patcher manually, you can do so with the app. There is no harm in trying to run the Patcher, as without compatible hardware, nothing will be done. You can see below on whether your hardware needs root volume patching or not.
|
||||
|
||||
There is also an option to remove root patches, which may be required in some situations, such as switching GPUs in Mac Pros or using Migration Assistant.
|
||||
|
||||
| Listing Patches | Patching Finished |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
|
||||
:::warning
|
||||
|
||||
With macOS Sequoia, MetallibSupportPkg is required to be downloaded for all 3802 systems. OCLP will handle this as long as you're connected to the internet.
|
||||
|
||||
Such systems include:
|
||||
|
||||
* NVIDIA
|
||||
* Kepler (GTX 600 - 700 series)
|
||||
* Intel
|
||||
* Ivy Bridge (HD 4000 series)
|
||||
* Haswell (Iris/HD 4000-5000 series)
|
||||
|
||||
:::
|
||||
|
||||
:::warning
|
||||
|
||||
With macOS Ventura and Macs with AMD Legacy GCN GPUs (ie. Metal), Root Patching requires a network connection to grab Apple's Kernel Debug Kit to start root patching. If your system is unable to connect to the internet, you can manually download a KDK from Apple's site:
|
||||
@@ -90,19 +129,62 @@ Machines that require this are those with AMD Metal dGPUs:
|
||||
|
||||
Below entries represent GPUs no longer natively supported, ie. requiring root volume patching with OpenCore Legacy Patcher:
|
||||
|
||||
:::details GPUs requiring patching in macOS Big Sur
|
||||
:::details GPUs requiring patching in different macOS versions
|
||||
|
||||
AMD Navi (RX 5000 - 6000 series) GPUs are non-functional in Mac Pro 2008 to 2012 using Ventura and newer due to lack of AVX2 support.
|
||||
|
||||
**Sequoia**
|
||||
|
||||
* NVIDIA:
|
||||
* Tesla (8000 - 300 series)
|
||||
* Kepler (600 - 800 series)
|
||||
* AMD:
|
||||
* TeraScale (2000 - 6000 series)
|
||||
* GCN 1-3 (7000 - R9 series)
|
||||
* Polaris (RX 4xx/5xx series, if CPU lacks AVX2)
|
||||
* Intel:
|
||||
* Iron Lake
|
||||
* Sandy Bridge (2000 - 3000 series)
|
||||
* Ivy Bridge (4000 series)
|
||||
* Haswell (4400, 4600, 5000 series)
|
||||
* Broadwell (6000 series)
|
||||
* Skylake (500 series)
|
||||
|
||||
:::
|
||||
**Sonoma**
|
||||
|
||||
:::details GPUs requiring patching in macOS Monterey
|
||||
* NVIDIA:
|
||||
* Tesla (8000 - 300 series)
|
||||
* Kepler (600 - 800 series)
|
||||
* AMD:
|
||||
* TeraScale (2000 - 6000 series)
|
||||
* GCN 1-3 (7000 - R9 series)
|
||||
* Polaris (RX 4xx/5xx series, if CPU lacks AVX2)
|
||||
* Intel:
|
||||
* Iron Lake
|
||||
* Sandy Bridge (2000 - 3000 series)
|
||||
* Ivy Bridge (4000 series)
|
||||
* Haswell (4400, 4600, 5000 series)
|
||||
* Broadwell (6000 series)
|
||||
* Skylake (500 series)
|
||||
|
||||
**Ventura**
|
||||
|
||||
* NVIDIA:
|
||||
* Tesla (8000 - 300 series)
|
||||
* Kepler (600 - 800 series)
|
||||
* AMD:
|
||||
* TeraScale (2000 - 6000 series)
|
||||
* GCN 1-3 (7000 - R9 series)
|
||||
* Polaris (RX 4xx/5xx series, if CPU lacks AVX2)
|
||||
* Intel:
|
||||
* Iron Lake
|
||||
* Sandy Bridge (2000 - 3000 series)
|
||||
* Ivy Bridge (4000 series)
|
||||
* Haswell (4400, 4600, 5000 series)
|
||||
* Broadwell (6000 series)
|
||||
* Skylake (500 series)
|
||||
|
||||
**Monterey**
|
||||
|
||||
* NVIDIA:
|
||||
* Tesla (8000 - 300 series)
|
||||
@@ -114,6 +196,17 @@ Below entries represent GPUs no longer natively supported, ie. requiring root vo
|
||||
* Sandy Bridge (2000 - 3000 series)
|
||||
* Ivy Bridge (4000 series)
|
||||
|
||||
|
||||
**Big Sur**
|
||||
|
||||
* NVIDIA:
|
||||
* Tesla (8000 - 300 series)
|
||||
* AMD:
|
||||
* TeraScale (2000 - 6000 series)
|
||||
* Intel:
|
||||
* Iron Lake
|
||||
* Sandy Bridge (2000 - 3000 series)
|
||||
|
||||
:::
|
||||
|
||||
:::details Wireless Cards requiring patching in macOS Monterey
|
||||
@@ -124,18 +217,3 @@ Below entries represent GPUs no longer natively supported, ie. requiring root vo
|
||||
* Atheros
|
||||
|
||||
:::
|
||||
|
||||
:::details GPUs requiring patching in macOS Ventura
|
||||
|
||||
* NVIDIA:
|
||||
* Kepler (600 - 800 series)
|
||||
* AMD:
|
||||
* GCN 1-3 (7000 - R9 series)
|
||||
* Polaris (RX 4xx/5xx series, if CPU lacks AVX2)
|
||||
* Intel:
|
||||
* Ivy Bridge (4000 series)
|
||||
* Haswell (4400, 4600, 5000 series)
|
||||
* Broadwell (6000 series)
|
||||
* Skylake (500 series)
|
||||
|
||||
:::
|
||||
|
||||
19
docs/PROCESS.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Background process
|
||||
|
||||
OpenCore Legacy Patcher utilizes a background process to:
|
||||
- Check for mismatched configurations and warn the user (e.g. installed MacBookPro11,1 config on MacBookPro11,5)
|
||||
- Monitor the status of installed Root Patches and OpenCore
|
||||
- Ask you to install Root Patches in case they aren't detected (typically after an update)
|
||||
- Check whether OpenCore is being booted from USB drive or internal drive
|
||||
- Ask you to install OpenCore on the internal disk in case booted from USB
|
||||
- React to upcoming updates requiring a new KDK to be downloaded, starting KDK download automatically
|
||||
|
||||
It is recommended to keep the background process enabled for smoothest functionality. e.g. to try and avoid failed patching when new KDK is not found.
|
||||
|
||||
If you decide to disable the background process, the KDK installation for each update has to be done manually. OCLP is also unable to detect Root Patches on boot, meaning manually opening the app and root patching is required.
|
||||
|
||||
::: warning Note:
|
||||
|
||||
In some cases macOS may report background process being added by "Mykola Grymalyuk", this happens due to a macOS bug where sometimes the developer name who sent the app for notarization is shown instead of the application name.
|
||||
Dortania cannot do anything about this.
|
||||
:::
|
||||
@@ -10,17 +10,17 @@ meta:
|
||||
content: Experience macOS just like before
|
||||
|
||||
features:
|
||||
- title: Built with security in mind
|
||||
details: Supporting System Integrity Protection(SIP), FileVault 2, .im4m Secure Boot and Vaulting. For many machines, you're just as secure as a supported Mac.
|
||||
# - title: Built with security in mind
|
||||
# details: Supporting System Integrity Protection(SIP), FileVault 2, .im4m Secure Boot and Vaulting. We make an effort to ensure your system is as secure as possible.
|
||||
- title: Native OTA updates
|
||||
details: Install updates the moment they come out, with native System Preferences support, just like a supported Mac.
|
||||
- title: Zero firmware patching
|
||||
details: Using the capabilities of the OpenCore boot manager, our protocol upgrades are done in memory and are never permanent.
|
||||
- title: Supporting more hardware
|
||||
details: New life is breathed into your decade-old graphics card or WiFi and bluetooth chipsets.
|
||||
details: New life is breathed into your decade-old graphics card, WiFi, and Bluetooth chipsets. Even your upgraded hardware receives benefits by unlocking exciting features like Hardware Acceleration, AirDrop, Apple Watch Unlock, Sidecar, and much more!
|
||||
- title: The newest features
|
||||
details: Unlock Sidecar, AirPlay to Mac, Night Shift, and Universal Control, even on natively supported models!
|
||||
- title: A helpful community
|
||||
details: Whether it's getting started or learning the specifics, you can always find answers with our amazing community of tinkerers, developers, and dreamers.
|
||||
footer: Copyright © Dortania 2020-2022
|
||||
footer: Copyright © Dortania 2020-2024
|
||||
---
|
||||
109
docs/SEQUOIA-DROP.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# macOS Sequoia Support
|
||||
|
||||

|
||||
|
||||
Another year, another release.
|
||||
|
||||
This time Apple dropped surprisingly few amount of Macs. With the release of OpenCore Legacy Patcher 2.0.0, early support for macOS Sequoia has been implemented.
|
||||
|
||||
|
||||
## Newly dropped hardware
|
||||
|
||||
* MacBookAir8,1 : MacBook Air (2018)
|
||||
* MacBookAir8,2 : MacBook Air (2019)
|
||||
|
||||
## Current status
|
||||
|
||||
OpenCore Legacy Patcher 2.0.0 will support Sequoia for most models normally supported by the Patcher, however some challenges remain. You can find information about them below.
|
||||
|
||||
Unfortunately due to T2 related problems, the recently dropped MacBookAir8,x models cannot be supported at this time.
|
||||
|
||||
[More information here](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1136)
|
||||
|
||||
## Non-functional features
|
||||
|
||||
On majority of patched Macs, iPhone Mirroring and Apple Intelligence won't be functional.
|
||||
|
||||
iPhone Mirroring requires T2 for attestation and Apple Intelligence requires an NPU only found in Apple Silicon, the patcher is unable to provide a fix for these as they're hardware requirements.
|
||||
|
||||
## Issues
|
||||
|
||||
* [Dual socket CPUs with Mac Pros and Xserve](#dual-socket-cpus-with-mac-pro-2008-and-xserve-2008)
|
||||
* [T2 Security chip](#t2-security-chip)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
|
||||
* [Graphics support and issues](#graphics-support-and-issues)
|
||||
|
||||
|
||||
### Dual socket CPUs with Mac Pro 2008 and Xserve 2008
|
||||
|
||||
Booting Sequoia on Mac Pro 2008 (MacPro3,1) or Xserve 2008 (Xserve2,1) with more than 4 cores will cause Sequoia to panic. OpenCore Legacy Patcher will automatically disable additional cores.
|
||||
|
||||
This is due to the dual socket nature of the machine, and likely some firmware/ACPI table incompatibility.
|
||||
|
||||
**If building OpenCore for older OS, this limitation can be disabled in Settings -> Build -> "MacPro3,1/Xserve2,1 Workaround".**
|
||||
|
||||
::: warning Note
|
||||
|
||||
Dual booting Sequoia and older will not be possible with all cores enabled due to reasons described before. In these cases you will be limited to 4 cores.
|
||||
|
||||
:::
|
||||
|
||||
### T2 security chip
|
||||
|
||||
The current biggest issue we face with supporting the MacBookAir8,x (2018/19) series is the T2 chip's lack of communication when booted through OpenCorePkg.
|
||||
|
||||
What happens when one of these units boots through OpenCorePkg is that AppleKeyStore.kext panics due to timeouts with the T2 chip:
|
||||
|
||||
```
|
||||
"AppleKeyStore":3212:0: sks timeout strike 18
|
||||
"AppleKeyStore":3212:0: sks timeout strike 19
|
||||
"AppleKeyStore":3212:0: sks timeout strike 20
|
||||
panic(cpu 0 caller 0xffffff801cd12509): "AppleSEPManager panic for "AppleKeyStore": sks request timeout" @AppleSEPManagerIntel.cpp:809
|
||||
```
|
||||
|
||||
This affects not only macOS Sequoia, but macOS Ventura and Sonoma are confirmed to have the same issue. Thus an underlying problem with the MacBookAir8,x's firmware where it is not happy with OpenCorePkg.
|
||||
|
||||
We currently do not have any leads on what exactly breaks the T2.
|
||||
* MacBookPro15,2, MacBookPro16,2 and Macmini8,1 do not exhibit these issues in local testing
|
||||
* MacPro7,1 does seem to surprisingly based on reports: [MacPro7,1 - OpenCorePkg](https://forums.macrumors.com/threads/manually-configured-opencore-on-the-mac-pro.2207814/post-29418464)
|
||||
* Notes from this report were unsuccessful locally: [Cannot boot MacPro7,1 #1487](https://github.com/acidanthera/bugtracker/issues/1487)
|
||||
|
||||
|
||||
### USB 1.1 (OHCI/UHCI) Support
|
||||
|
||||
For Penryn systems, pre-2013 Mac Pros and Xserve, USB 1.1 support was outright removed in macOS Ventura, therefore this applies all the way to Sequoia.
|
||||
While USB 1.1 may seem unimportant, it handles many important devices on your system. These include:
|
||||
|
||||
* Keyboard and Trackpad for laptops
|
||||
* IR Receivers
|
||||
* Bluetooth
|
||||
|
||||
Users will need to use a USB hub for installation and post-OS updates when patches are cleaned:
|
||||
|
||||
However, the driver has recently been weakened starting from Sonoma, which means even some USB hubs may not work properly.
|
||||
|
||||
An alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH.
|
||||
That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password.
|
||||
|
||||
After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` and finally `sudo reboot`.
|
||||
|
||||
|
||||

|
||||
|
||||
::: warning The following systems rely on USB 1.1
|
||||
|
||||
* iMac10,x and older
|
||||
* Macmini4,1 and older
|
||||
* MacBook7,1 and older
|
||||
* MacBookAir3,1 and older
|
||||
* MacPro5,1 and older
|
||||
* Xserve 3,1 and older
|
||||
:::
|
||||
|
||||
[More information here](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
|
||||
### Graphics support and issues
|
||||
This build includes both Legacy Metal and non-Metal patches for macOS Sequoia. Refer to the following links for more information about Legacy Metal and non-Metal support and their respective issues.
|
||||
|
||||
* [Legacy Metal](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)
|
||||
* [Non-Metal](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
|
||||
95
docs/SONOMA-DROP.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# macOS Sonoma Support
|
||||
|
||||

|
||||
|
||||
*Well here we are again, it's always such a pleasure~*
|
||||
|
||||
Apple has yet again dropped a bunch of models, continuing their journey on discontinuing Intel Macs. With the release of OpenCore Legacy Patcher 1.0.0, early support for macOS Sonoma has been implemented.
|
||||
|
||||
## Versioning
|
||||
|
||||
With 1.0.0, we'll be switching to a proper major, minor and bug fix system ([Semantic Versioning](https://semver.org/)). This means the coming release will be version 1.0.0, and future releases plan to follow this scheme:
|
||||
|
||||
- First digit: Major changes, including new OS support, API changes, and significant patch set changes, etc
|
||||
- Second digit: Minor changes, including incoming OS update fixes, minor patch set changes, etc
|
||||
- Third digit: Bug fixes, primarily hot fixes either due to a regression in prior release or resolving issues in already released OS updates
|
||||
|
||||
|
||||
## Newly dropped hardware
|
||||
|
||||
* MacBook10,1: MacBook (Retina, 12-inch, 2017)
|
||||
* MacBookPro14,1: MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
|
||||
* MacBookPro14,2: MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)
|
||||
* MacBookPro14,3: MacBook Pro (15-inch, 2017)
|
||||
* iMac18,1: iMac (21.5-inch, 2017)
|
||||
* iMac18,2: iMac (Retina 4K, 21.5-inch, 2017)
|
||||
* iMac18,3: iMac (Retina 5K, 27-inch, 2017)
|
||||
|
||||
## Current status
|
||||
|
||||
OpenCore Legacy Patcher 1.0.0 will support Sonoma for all models normally supported by the Patcher, however some challenges remain. You can find information about them below.
|
||||
|
||||
## Issues
|
||||
|
||||
* [Bluetooth](#bluetooth)
|
||||
* [T1 Security chip](#t1-security-chip)
|
||||
* [USB 1.1 (OHCI/UHCI) Support](#usb-1-1-ohci-uhci-support)
|
||||
* [Graphics support and issues](#graphics-support-and-issues)
|
||||
|
||||
|
||||
### Bluetooth
|
||||
|
||||
Sometimes Bluetooth may not work after boot on pre-2012 models. Running NVRAM reset can alleviate it.
|
||||
|
||||
Dual boots may also bring the issue back even after the reset.
|
||||
|
||||
### T1 Security chip
|
||||
|
||||
::: details Support for the T1 Security chip (Resolved in 1.1.0 and newer)
|
||||
|
||||
Sonoma has removed support for T1 chips found in most 2016 and 2017 Macs. Therefore on these systems, the following will not function:
|
||||
|
||||
* Enable or disable FileVault
|
||||
* Open the Password Settings window
|
||||
* Add fingerprints (if upgrading, existing fingerprints will be deleted)
|
||||
* Add cards to Apple Pay
|
||||
|
||||
[More information here](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1103)
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
Note that erasing the entire drive will remove the T1 firmware and it won't be reinstalled.
|
||||
:::
|
||||
|
||||
### USB 1.1 (OHCI/UHCI) Support
|
||||
|
||||
For Penryn systems, pre-2013 Mac Pros and Xserve, USB 1.1 support was outright removed in macOS Ventura and naturally this continues in Sonoma.
|
||||
While USB 1.1 may seem unimportant, it handles many important devices on your system. These include:
|
||||
|
||||
* Keyboard and Trackpad for laptops
|
||||
* IR Receivers
|
||||
* Bluetooth
|
||||
|
||||
With OpenCore Legacy Patcher v0.6.0+, basic support has been implemented via Root Volume patching. However due to this, users will need to use a USB hub for installation and post-OS updates when patches are cleaned:
|
||||
|
||||

|
||||
|
||||
::: warning The following systems rely on USB 1.1
|
||||
|
||||
* iMac10,x and older
|
||||
* Macmini4,1 and older
|
||||
* MacBook7,1 and older
|
||||
* MacBookAir3,1 and older
|
||||
* MacPro5,1 and older
|
||||
* Xserve 3,1 and older
|
||||
:::
|
||||
|
||||
[More information here](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
|
||||
### Graphics support and issues
|
||||
This build includes both Legacy Metal and non-Metal patches for macOS Sonoma. Refer to the following links for more information about Legacy Metal and non-Metal support and their respective issues.
|
||||
|
||||
* [Legacy Metal](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1008)
|
||||
* [Non-Metal](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/108)
|
||||
|
||||
144
docs/TESTED.md
@@ -1,144 +0,0 @@
|
||||
# Tested Models on OpenCore Legacy Patcher
|
||||
|
||||
To aid users in troubleshooting, we've compiled a list of users who've reported success with OpenCore Legacy Patcher as well as the version used. This should aid users in verifying whether issues with the patcher are regression-related with newer versions.
|
||||
|
||||
::: details MacBook
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacBook4,1 | <span style="color:#30BCD5"> YES </span> | Mami | Stock | Unknown | Couldn't install due to broken USB support |
|
||||
| MacBook5,1 | ^^ | air.man | ^^ | 0.0.19 | N/A |
|
||||
| MacBook5,2 | ^^ | Finder352 | ^^ | ^^ | ^^ |
|
||||
| MacBook6,1 | ^^ | Finder352 | ^^ | ^^ | ^^ |
|
||||
| MacBook7,1 | ^^ | MykolaG | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | Jazzzny | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | AlexSakha67 | ^^ | 0.0.20 | ^^ |
|
||||
| MacBook8,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
|
||||
:::
|
||||
|
||||
::: details MacBook Air
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacBookAir2,1 | <span style="color:#30BCD5"> YES </span> | Bruno | Stock | 0.4.5 | Slow to the point of being unusable. |
|
||||
| MacBookAir3,1 | ^^ | uvesten | Stock | 0.3.3 | N/A |
|
||||
| MacBookAir3,2 | ^^ | houser42 | ^^ | Unknown | ^^ |
|
||||
| MacBookAir4,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
| MacBookAir4,2 | <span style="color:#30BCD5"> YES </span> | bdwilson1907 | Stock | 0.3.1 | Intermittent keyboard backlight |
|
||||
| MacBookAir5,1 | ^^ | Ausdauersportler | ^^ | 0.0.9 | N/A |
|
||||
| ^^ | ^^ | webg3 | ^^ | Unknown | ^^ |
|
||||
| MacBookAir5,2 | ^^ | Bab-droid | ^^ | 0.0.19 | ^^ |
|
||||
| ^^ | ^^ | K-Hobert | ^^ | Unknown | ^^ |
|
||||
| ^^ | ^^ | cboukouv | ^^ | 0.0.21 | ^^ |
|
||||
| MacBookAir6,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
| MacBookAir6,2 | ^^ | ^^ | ^^ | ^^ | ^^ |
|
||||
|
||||
:::
|
||||
|
||||
::: details MacBook Pro
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacBookPro4,1 | <span style="color:#30BCD5"> YES </span> | cboukouv | Stock | 0.0.19 | N/A |
|
||||
| MacBookPro5,1 | ^^ | GURU_Jasho#5736 | ^^ | 0.0.21 | ^^ |
|
||||
| MacBookPro5,2 | ^^ | hvds | ^^ | ^^ | ^^ |
|
||||
| MacBookPro5,3 | ^^ | kommtzeitkonrad | ^^ | 0.0.22 | ^^ |
|
||||
| MacBookPro5,4 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
| MacBookPro5,5 | <span style="color:#30BCD5"> YES </span> | ASentientHedgehog | Stock | - | ^^ |
|
||||
| ^^ | ^^ | ParaDoX1994 | Stock | 0.4.5 | Camera/Bluetooth not working (connector broken) |
|
||||
| MacBookPro6,1 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
| MacBookPro6,2 | <span style="color:#30BCD5"> YES </span> | Jakeluke | Stock | Unknown | dGPU broken |
|
||||
| MacBookPro7,1 | ^^ | fussel132 | ^^ | 0.1.2 | N/A
|
||||
| ^^ | ^^ | casey1234 | Upgraded | 0.3.3 | Upgraded SSD |
|
||||
| MacBookPro8,1 | <span style="color:#30BCD5"> YES </span> | AvaQueen | Stock | 0.0.19 | N/A |
|
||||
| MacBookPro8,1 | ^^ | charly-black | Upgraded | 0.3.1 | Upgraded BCM94331PCIEBT4CAX |
|
||||
| MacBookPro8,2 | ^^ | air.man | Stock | 0.0.22 | dGPU disabled |
|
||||
| ^^ | ^^ | cboukouv | ^^ | 0.0.19 | N/A |
|
||||
| MacBookPro8,3 | ^^ | lulujyc | ^^ | 0.1.4 | dGPU disabled |
|
||||
| MacBookPro9,1 | <span style="color:#30BCD5"> YES </span>| jbdamiano | Stock | 0.0.19 | N/A |
|
||||
| ^^ | ^^ | dennes544 | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | cgrazy | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | LIPA85 | ^^ | ^^ | ^^ |
|
||||
| MacBookPro9,2 | <span style="color:#30BCD5"> YES </span> | alexx17xx | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | Arvxistanx | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | CyberDroid1 | ^^ | 0.0.16 | ^^ |
|
||||
| ^^ | ^^ | woefi | Upgraded | 0.0.13 | Upgraded BCM94331CAX |
|
||||
| ^^ | ^^ | whgmkeller | Stock | 0.0.11 | N/A |
|
||||
| ^^ | ^^ | vinaypundith | Unknown | 0.0.7 | ^^ |
|
||||
| ^^ | ^^ | casey1234 | Upgraded | 0.3.3 | Upgraded RAM and SSD |
|
||||
| ^^ | ^^ | crystall1nedev | Upgraded | 0.4.4 | ^^ |
|
||||
| MacBookPro10,1 | <span style="color:#30BCD5"> YES </span> | traviswparker | Stock | 0.0.14 | N/A |
|
||||
| ^^ | ^^ | il-rollino | Upgraded | 0.0.21 | Upgraded BCM94360CSAX |
|
||||
| MacBookPro10,2 | ^^ | akidone | ^^ | 0.3.0 | ^^ |
|
||||
| MacBookPro11,1 | <span style="color:#30BCD5"> YES </span> | ParaDoX1994 | Stock | 0.4.4 | N/A |
|
||||
| MacBookPro11,2 | ^^ | casey1234 | ^^ | 0.3.3 | ^^ |
|
||||
| MacBookPro11,3 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
:::
|
||||
|
||||
::: details Mac mini
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| Macmini3,1 | <span style="color:#30BCD5"> YES </span> | ASentientHedgehog | Stock | N/A | N/A |
|
||||
| Macmini4,1 | <span style="color:#30BCD5"> YES </span> | Towster15#6369 | ^^ | 0.4.4 | Does not have internal SATA cable, booted and installed to SSD over USB 2.0 instead |
|
||||
| ^^ | ^^ | MykolaG | ^^ | 0.4.5 | SD card reader possibly broken. |
|
||||
| Macmini5,1 | <span style="color:#30BCD5"> YES </span> | MykolaG | ^^ | 0.4.5 | N/A |
|
||||
| Macmini5,2 | ^^ | charly-black | ^^ | 0.3.1 | ^^ |
|
||||
| ^^ | ^^ | MykolaG | ^^ | 0.4.5 | SD card reader possibly broken. |
|
||||
| Macmini5,3 | <span style="color:red"> NO </span> | N/A | N/A | N/A | N/A |
|
||||
| Macmini6,1 | <span style="color:#30BCD5"> YES </span> | cicofz | Stock | 0.0.21 | ^^ |
|
||||
| ^^ | ^^ | Stig124 | ^^ | 0.0.19 | ^^ |
|
||||
| ^^ | ^^ | mwidjaya | ^^ |0.0.18 | ^^ |
|
||||
| ^^| ^^ | MykolaG | ^^ | 0.4.5 | ^^ |
|
||||
| Macmini6,2 | ^^ | Shelbs | ^^ | 0.0.16 | ^^ |
|
||||
| Macmini7,1 | <span style="color:#30BCD5"> YES </span> | MykolaG | ^^ | 0.4.5 | ^^ |
|
||||
| Macmini8,1 | ^^ | ^^ | ^^ | 0.4.5 | ^^ |
|
||||
:::
|
||||
|
||||
::: details iMac
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| iMac7,1 | <span style="color:#30BCD5"> YES </span> | lulujyc | Upgraded | 0.3.1 | Upgraded with BCM94352HMB <br><br> The USB 1.1 controller is unstable on Big Sur+, using USB hubs (forcing USB 2.0) can fix unrecognized keyboard/ mouse. |
|
||||
| iMac8,1 | <span style="color:#30BCD5"> YES </span> | EduCovas | Stock | 0.0.21 | N/A |
|
||||
| iMac9,1 | <span style="color:#30BCD5"> YES </span> | Allanrfox | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | Jakeluke | ^^ | ^^ | ^^ |
|
||||
| iMac10,1 | <span style="color:#30BCD5"> YES </span> | Ausdauersportler | Upgraded | Unknown | Upgraded with WX4150 |
|
||||
| iMac11,1 | ^^ | internetzel | ^^ | ^^ | Upgraded RX580 mobile |
|
||||
| iMac11,2 | ^^ | MykolaG | Stock | 0.0.21 | N/A |
|
||||
| ^^ | ^^ | iMac-iPad | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | vinaypundith | Unknown | 0.0.19 | ^^ |
|
||||
| iMac11,3 | ^^ | Ausdauersportler | Upgraded | 0.0.21 | Upgraded with Polaris GPU and BCM943602CDP |
|
||||
| iMac12,1 | <span style="color:#30BCD5"> YES </span> | shnockdu | ^^ | ^^ | Upgraded with Kepler GPU |
|
||||
| ^^ | ^^ | StephN999 | ^^ | ^^ | Upgraded with WX4150 GPU and BCM94360CD |
|
||||
| iMac12,2 | ^^ | Ausdauersportler | ^^ | ^^ | Upgraded with Polaris GPU and BCM943602CDP |
|
||||
| iMac13,1 | <span style="color:#30BCD5"> YES </span> | alexx17xx | Stock | 0.0.19 | N/A |
|
||||
| iMac13,2 | ^^ | Alain13 | ^^ | ^^ | ^^ |
|
||||
| ^^ | ^^ | algernonpule | ^^ | ^^ | ^^ |
|
||||
| iMac13,3 | <span style="color:red"> NO </span> | N/A | N/A | N/A | ^^ |
|
||||
| iMac14,1 | <span style="color:#30BCD5"> YES </span> | woefi | Upgraded | 0.0.21 | Upgraded NVMe |
|
||||
| ^^ | ^^ | mikeboss | Stock | 0.0.19 | N/A |
|
||||
| iMac14,2 | ^^ | OKonnel | ^^ | 0.0.22 | ^^ |
|
||||
| ^^ | ^^ | mibaxx | ^^ | 0.0.21 | ^^ |
|
||||
| iMac14,3 | ^^ | StupeFied | ^^ | 0.4.5 | ^^ |
|
||||
| iMac15,1 | <span style="color:#30BCD5"> YES </span> | JakubMazur | Upgraded | 0.4.1 | Upgraded RAM, Radeon R9 M295X and Quad-Core Intel Core i7 |
|
||||
:::
|
||||
|
||||
::: details Mac Pro
|
||||
|
||||
| SMBIOS | Tested | Tester | Model | Version | Comment |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| MacPro3,1 | <span style="color:#30BCD5"> YES </span> | MykolaG | Upgraded | 0.1.6 | Upgraded RX 470 and BCM94360CD.<br/>Stock Bluetooth card removed. |
|
||||
| ^^ | ^^ | christiann | ^^ | 0.0.21 | Upgraded RX 560 and BCM94322.<br/>Stock Bluetooth card removed. |
|
||||
| ^^ | ^^ | gw463 | ^^ | 0.0.22 | Upgraded GTX 680 and BCM94360 |
|
||||
| ^^ | ^^ | AlexSakha67 | ^^ | 0.0.20 | Upgraded R9 280 |
|
||||
| ^^ | ^^ | nekton1 | ^^ | ^^ | Upgraded GTX 680 |
|
||||
| ^^ | ^^ | Pri-est | Unknown | 0.0.9 | N/A |
|
||||
| ^^ | ^^ | vinaypundith | Upgraded | 0.0.6 | Upgraded with GTX 680 and BCM94360CD. |
|
||||
| ^^ | ^^ | ParaDoX1994 | ^^ | 0.4.4 | Upgraded with HD 7950.<br/>Stock Bluetooth card removed. |
|
||||
| MacPro4,1 | <span style="color:#30BCD5"> YES </span> | vinaypundith | Unknown | 0.0.9 | N/A |
|
||||
| MacPro5,1 | ^^ | woefi | Upgraded | 0.0.21 | Upgraded with RX 580. |
|
||||
| ^^ | ^^ | Mabrouk Oscar | Unknown | ^^ | N/A |
|
||||
| ^^ | ^^ | astuffedtiger | Flashed | 0.0.18 | MacPro4,1 flashed to 5,1 |
|
||||
:::
|
||||
@@ -1,186 +1,280 @@
|
||||
# Troubleshooting
|
||||
|
||||
Here are some common errors that users may experience while using this patcher:
|
||||
|
||||
* [OpenCore Legacy Patcher not launching](#opencore-legacy-patcher-not-launching)
|
||||
* [Stuck on `This version of Mac OS X is not supported on this platform`](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform)
|
||||
* [Cannot boot macOS without the USB](#cannot-boot-macos-without-the-usb)
|
||||
* [Infinite Recovery OS Booting](#infinite-recovery-os-reboot)
|
||||
* [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure)
|
||||
* [Booting with a non-flashed GPU](#booting-with-a-non-flashed-gpu)
|
||||
* [How to Boot Big Sur Recovery](#how-to-boot-big-sur-recovery)
|
||||
* [Stuck on "Your Mac needs a firmware update"](#stuck-on-your-mac-needs-a-firmware-update)
|
||||
* [No Brightness Control](#no-brightness-control)
|
||||
* [Cannot connect Wi-Fi on Monterey with legacy cards](#cannot-connect-Wi-Fi-on-Monterey-with-legacy-cards)
|
||||
* [No Graphics Acceleration](#no-graphics-acceleration)
|
||||
* [Black Screen on MacBookPro11,3 in macOS Monterey](#black-screen-on-macbookpro113-in-macos-monterey)
|
||||
* [No DisplayPort Output on Mac Pros with NVIDIA Kepler](#no-displayport-output-on-mac-pros-with-NVIDIA-kepler)
|
||||
* [Volume Hash Mismatch Error in macOS Monterey](#volume-hash-mismatch-error-in-macos-monterey)
|
||||
* [Cannot Disable SIP in recoveryOS](#cannot-disable-sip-in-recoveryos)
|
||||
* [Stuck on "Less than a minute remaining..."](#stuck-on-less-than-a-minute-remaining)
|
||||
* [No acceleration after a Metal GPU swap on Mac Pro](#no-acceleration-after-a-metal-gpu-swap-on-mac-pro)
|
||||
* [Keyboard, Mouse and Trackpad not working in installer or after update](#keyboard-mouse-and-trackpad-not-working-in-installer-or-after-update)
|
||||
|
||||
|
||||
## OpenCore Legacy Patcher not launching
|
||||
|
||||
If the application won't launch (e.g. icon will bounce in the Dock), try launching OCLP via Terminal by typing the following command, make sure you've moved the app to `/Applications` before this.
|
||||
|
||||
```sh
|
||||
/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
|
||||
```
|
||||
|
||||
## Stuck on `This version of Mac OS X is not supported on this platform`
|
||||
|
||||
This means macOS has detected an SMBIOS it does not support. To resolve this, ensure you're booting OpenCore **before** the macOS installer in the boot picker. Reminder that the option will be called `EFI Boot`.
|
||||
|
||||
Once you've booted OpenCore at least once, your hardware should now auto-boot it until either an NVRAM reset occurs, or you remove the drive with OpenCore installed.
|
||||
|
||||
## Cannot boot macOS without the USB
|
||||
|
||||
By default, the OpenCore Patcher won't install OpenCore onto the internal drive itself during installs. Instead, you'll need to either [manually transfer](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html) OpenCore to the internal drive's EFI or run this patcher's Option 2 again and select your internal drive.
|
||||
|
||||
Reminder that once this is done, you'll need to select OpenCore in the boot picker again for your hardware to remember this entry and auto boot from then on.
|
||||
|
||||
## Infinite Recovery OS Booting
|
||||
|
||||
With OpenCore Legacy Patcher, we rely on Apple Secure Boot to ensure OS updates work correctly and reliably with Big Sur. However this installs NVRAM variables that will confuse your Mac if not running with OpenCore. To resolve this, simply uninstall OpenCore and [reset NVRAM](https://support.apple.com/en-mide/HT201255).
|
||||
|
||||
* Note: Machines with modified root volumes will also result in an infinite recovery loop until integrity is restored.
|
||||
|
||||
## Reboot when entering Hibernation (`Sleep Wake Failure`)
|
||||
|
||||
[Known issue on some models](https://github.com/dortania/Opencore-Legacy-Patcher/issues/72), a temporary fix is to disable Hibernation by executing the following command in the terminal:
|
||||
|
||||
```
|
||||
sudo pmset -a hibernatemode 0
|
||||
```
|
||||
|
||||
## Booting with a non-flashed GPU
|
||||
|
||||
For Mac Pro, Xserve and iMac users with non-flashed GPUs, you can still easily boot OpenCore and view the entire boot process. To do so, make sure SIP is disabled (to allow NVRAM write access) and run the following:
|
||||
|
||||
```sh
|
||||
sudo bless --verbose --file /Volumes/VOLNAME/EFI/OC/OpenCore.efi --folder /Volumes/VOLNAME/EFI/OC --setBoot
|
||||
```
|
||||
|
||||
* Note 1: You will need to replace `VOLNAME` with the Volume name of your USB or hard drive with OpenCore.
|
||||
* Note 2: Once done, you can re-enable SIP.
|
||||
* Note 3: The EFI partition OpenCore was installed on must be mounted. If it's unmounted, simply rerun "Install OpenCore to drive."
|
||||
|
||||
Once you boot OpenCore for the first time, LauncherOption will install itself as the top boot priority, making OpenCore always launch. Combined with `RequestBootVar`, all boot options must go through OpenCore, ensuring seamless usage even with OS installation and updates.
|
||||
|
||||
## How to Boot Big Sur Recovery
|
||||
|
||||
By default, the patcher will try to hide extra boot options such as recovery from the user. To make them appear, simply press the `Spacebar` key while inside OpenCore's Picker to list all boot options.
|
||||
|
||||
## Stuck on "Your Mac needs a firmware update"
|
||||
|
||||
Full error: "Your Mac needs a firmware update in order to install to this Volume. Please select a Mac OS Extended (Journaled) volume instead."
|
||||
|
||||
This error occurs when macOS determines that the current firmware does not have full APFS support. To resolve this, when installing OpenCore, head to "Patcher Settings" and enable "Moderate SMBIOS Patching" or higher. This will ensure that the firmware reported will show support for full APFS capabilities.
|
||||
|
||||
## No Brightness Control
|
||||
|
||||
With OCLP v0.0.22, we've added support for brightness control on many models. However, some users may have noticed that their brightness keys do not work.
|
||||
|
||||
As a work-around, we recommend users try out the below app:
|
||||
|
||||
* [Brightness Slider](https://actproductions.net/free-apps/brightness-slider/)
|
||||
|
||||
## Cannot connect Wi-Fi on Monterey with legacy cards
|
||||
|
||||
With OCLP v0.2.5, we've added support for legacy Wi-Fi on Monterey. However, some users may have noticed that they can't connect to wireless networks.
|
||||
|
||||
To work-around this, we recommend that users manually connect using the "Other" option in the Wi-Fi menu bar or manually adding the network in the "Network" preference pane.
|
||||
|
||||
## No Graphics Acceleration
|
||||
|
||||
In macOS, GPU drivers are often dropped from the OS with each major release of it. With macOS Big Sur, currently, all non-Metal GPUs require additional patches to gain acceleration. In addition, macOS Monterey removed Graphics Drivers for both Intel Ivy Bridge and NVIDIA Kepler graphics processors.
|
||||
|
||||
If you're using OCLP v0.4.4, you should have been prompted to install Root Volume patches after the first boot from installation of macOS. If you need to do this manually, you can do so within the patcher app. Once rebooted, acceleration will be re-enabled as well as brightness control for laptops.
|
||||
|
||||
## Black Screen on MacBookPro11,3 in macOS Monterey
|
||||
|
||||
Due to Apple dropping NVIDIA Kepler support in macOS Monterey, [MacBookPro11,3's GMUX has difficulties switching back to the iGPU to display macOS correctly.](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/522) To work-around this issue, boot the MacBookPro11,3 in Safe Mode and once macOS is installed, run OCLP's Post Install Root Patches to enable GPU Acceleration for the NVIDIA dGPU.
|
||||
|
||||
* Safe Mode can be started by holding `Shift` + `Enter` when selecting macOS Monterey in OCLP's Boot Menu.
|
||||
|
||||
## No DisplayPort Output on Mac Pros with NVIDIA Kepler
|
||||
|
||||
If you're having trouble with DisplayPort output on Mac Pros, try enabling Minimal Spoofing in Settings -> SMBIOS Settings and rebuild/install OpenCore. This will trick macOS drivers into thinking you have a newer MacPro7,1 and resolve the issue.
|
||||
|
||||

|
||||
|
||||
## Volume Hash Mismatch Error in macOS Monterey
|
||||
|
||||
A semi-common popup some users face is the "Volume Hash Mismatch" error:
|
||||
|
||||
<p align="center">
|
||||
<img src="../images/Hash-Mismatch.png">
|
||||
</p>
|
||||
|
||||
What this error signifies is that the OS detects that the boot volume's hash does not match what the OS is expecting, this error is generally cosmetic and can be ignored. However if your system starts to crash spontaneously shortly after, you'll want to reinstall macOS fresh without importing any data at first.
|
||||
|
||||
* Note that this bug affects native Macs as well and is not due to issues with unsupported Macs: [OSX Daily: “Volume Hash Mismatch” Error in MacOS Monterey](https://osxdaily.com/2021/11/10/volume-hash-mismatch-error-in-macos-monterey/)
|
||||
|
||||
Additionally, it can help to disable FeatureUnlock in Settings -> Misc Settings as this tool can be strenuous on systems with weaker memory stability.
|
||||
|
||||
## Cannot Disable SIP in recoveryOS
|
||||
|
||||
With OCLP, the patcher will always overwrite the current SIP value on boot to ensure that users don't brick an installation after an NVRAM reset. However, for users wanting to disable SIP entirely, this can be done easily.
|
||||
|
||||
Head into the GUI, go to Patcher Settings, and toggle the bits you need disabled from SIP:
|
||||
|
||||
| SIP Enabled | SIP Lowered (Root Patching) | SIP Disabled |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
## Intermediate issues with USB 1.1 and Bluetooth on MacPro3,1 - MacPro5,1
|
||||
|
||||
For those experiencing issues with USB 1.1 devices (such as mice, keyboards and bluetooth chipsets), macOS Big Sur and newer have weakened OS-side reliability for the UHCI controller in older Mac Pros.
|
||||
|
||||
* UHCI is a USB 1.1 controller that is hooked together with the USB 2.0 ports in your system. Whenever a USB 1.1 device is detected, the UHCI controller is given ownership of the device at a hardware/firmware level.
|
||||
* EHCI is the USB 2.0 controller in older Mac Pros
|
||||
|
||||
Because of this, we recommend placing a USB 2.0/3.0 hub between your devices and the port on the Mac Pro. UHCI and EHCI cannot both be used at once, so using a USB hub will always force the EHCI controller on.
|
||||
|
||||
* Alternatively, you can try cold-starting the hardware and see if macOS recognizes the UHCI controller properly.
|
||||
|
||||
## Stuck on "Less than a minute remaining..."
|
||||
|
||||
A common area for systems to get "stuck", namely for units that are missing the `AES` CPU instruction/older mobile hardware. During this stage, a lot of heavy cryptography is performed, which can make systems appear to be stuck. In reality they are working quite hard to finish up the installation.
|
||||
|
||||
Because this step can take a few hours or more depending on drive speeds, be patient at this stage and do not manually power off or reboot your machine as this will break the installation and require you to reinstall. If you think your system has stalled, press the Caps Lock key. If the light turns on, your system is busy and not actually frozen.
|
||||
|
||||
## No acceleration after a Metal GPU swap on Mac Pro
|
||||
|
||||
If you finished installing Monterey with the original card installed (to see bootpicker for example) and swapped your GPU to a Metal supported one, you may notice that you're missing acceleration. To fix this, open OCLP and revert root patches to get your Metal-supported GPU work again.
|
||||
|
||||
Alternatively, you can remove "AutoPkg-Assets.pkg" from /Library/Packages on the USB drive before proceeding with the installation. To see the folder, enable hidden files with `Command` + `Shift` + `.`
|
||||
|
||||
The reason for this is that the autopatcher will assume that you will be using the original graphics card and therefore does non-metal patching, which includes removing some drivers for other cards. This causes Metal cards to not accelerate after swapping.
|
||||
|
||||
## Keyboard, Mouse and Trackpad not working in installer or after update
|
||||
|
||||
For Macs using legacy USB 1.1 controllers, OpenCore Legacy Patcher can only restore support once it has performed root volume patches. Thus to install macOS, you need to hook up a USB hub between your Mac and Keyboard/Mouse.
|
||||
|
||||
* For MacBook users, you'll need to find an external keyboard/mouse in addition to the USB hub
|
||||
|
||||
More information can be found here:
|
||||
|
||||
* [Legacy UHCI/OHCI support in Ventura #1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
|
||||
Applicable models include:
|
||||
|
||||
| Family | Year | Model | Notes |
|
||||
| :---------- | :--------------------| :---------------------------- | :----------------------------------------------- |
|
||||
| MacBook | Mid 2010 and older | MacBook4,1 - MacBook7,1 | |
|
||||
| MacBook Air | Late 2010 and older | MacBookAir2,1 - MacBookAir3,x | |
|
||||
| MacBook Pro | Mid 2010 and older | MacBookPro4,1 - MacBookPro7,x | Excludes Mid 2010 15" and 17" (MacBookPro6,x) |
|
||||
| iMac | Late 2009 and older | iMac7,1 - iMac10,x | Excludes Core i5/7 27" late 2009 iMac (iMac11,1) |
|
||||
| Mac mini | Mid 2011 and older | Macmini3,1 - Macmini5,x | |
|
||||
| Mac Pro | Mid 2010 and older | MacPro3,1 - MacPro5,1 | |
|
||||
|
||||
|
||||

|
||||
# Troubleshooting
|
||||
|
||||
Here are some common errors that users may experience while using this patcher:
|
||||
|
||||
* [OpenCore Legacy Patcher not launching](#opencore-legacy-patcher-not-launching)
|
||||
* ["You don't have permission to save..." error when creating USB installer](#you-don-t-have-permission-to-save-error-when-creating-usb-installer)
|
||||
* [Stuck on `This version of Mac OS X is not supported on this platform` or (🚫) Prohibited Symbol](#stuck-on-this-version-of-mac-os-x-is-not-supported-on-this-platform-or-🚫-prohibited-symbol)
|
||||
* [Cannot boot macOS without the USB](#cannot-boot-macos-without-the-usb)
|
||||
* [Infinite Recovery OS Booting](#infinite-recovery-os-reboot)
|
||||
* [System version mismatch error when root patching](#system-version-mismatch-error-when-root-patching)
|
||||
* [Stuck on boot after root patching](#stuck-on-boot-after-root-patching)
|
||||
* ["Unable to resolve dependencies, error code 71" when root patching](#unable-to-resolve-dependencies-error-code-71-when-root-patching)
|
||||
* [Reboot when entering Hibernation (`Sleep Wake Failure`)](#reboot-when-entering-hibernation-sleep-wake-failure)
|
||||
* [How to Boot Recovery through OpenCore Legacy Patcher](#how-to-boot-recovery-through-opencore-legacy-patcher)
|
||||
* [Stuck on "Your Mac needs a firmware update"](#stuck-on-your-mac-needs-a-firmware-update)
|
||||
* [No Brightness Control](#no-brightness-control)
|
||||
* [Cannot connect Wi-Fi on Monterey with legacy cards](#cannot-connect-Wi-Fi-on-Monterey-with-legacy-cards)
|
||||
* [No Graphics Acceleration](#no-graphics-acceleration)
|
||||
* [Black Screen on MacBookPro11,3 in macOS Monterey](#black-screen-on-macbookpro113-in-macos-monterey)
|
||||
* [No DisplayPort Output on Mac Pros with NVIDIA Kepler](#no-displayport-output-on-mac-pros-with-NVIDIA-kepler)
|
||||
* [Volume Hash Mismatch Error in macOS Monterey](#volume-hash-mismatch-error-in-macos-monterey)
|
||||
* [Cannot Disable SIP in recoveryOS](#cannot-disable-sip-in-recoveryos)
|
||||
* [Stuck on "Less than a minute remaining..."](#stuck-on-less-than-a-minute-remaining)
|
||||
* [No acceleration after a Metal GPU swap on Mac Pro](#no-acceleration-after-a-metal-gpu-swap-on-mac-pro)
|
||||
* [Keyboard, Mouse and Trackpad not working in installer or after update](#keyboard-mouse-and-trackpad-not-working-in-installer-or-after-update)
|
||||
* [No T1 functionality after installing Sonoma or newer](#no-t1-functionality-after-installing-sonoma-or-newer)
|
||||
|
||||
|
||||
## OpenCore Legacy Patcher not launching
|
||||
|
||||
If the application won't launch (e.g. icon will bounce in the Dock), try launching OCLP via Terminal by typing the following command, make sure you've moved the app to `/Applications` before this.
|
||||
|
||||
```sh
|
||||
/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher
|
||||
```
|
||||
|
||||
## "You don't have permission to save..." error when creating USB installer
|
||||
|
||||
In some cases, a following error saying "The bless of the installer disk failed" stating the reason as "You don't have permission to save..." may appear.
|
||||
|
||||
|
||||
<div align="center">
|
||||
<img src="./images/Error-No-Permission-To-Save.png" alt="NoPermissionToSave" width="400" />
|
||||
</div>
|
||||
|
||||
|
||||
To resolve this, you may try adding Full Disk Access permission for OpenCore Legacy Patcher. To add it, first go to the settings
|
||||
|
||||
* Ventura and Sonoma: Go to System Settings -> Privacy and Security -> Full Disk Access
|
||||
|
||||
* Big Sur and Monterey: Go to System Preferences -> Security and Privacy -> Full Disk Access
|
||||
|
||||
Enable OpenCore-Patcher in the list. If not found on the list, press the + sign to add a new entity and find OpenCore Legacy Patcher from Applications.
|
||||
|
||||
Restart OpenCore Legacy Patcher and try creating your USB drive again.
|
||||
|
||||
Optional: After you've created your USB drive, you can remove OpenCore Legacy Patcher from Full Disk Access again.
|
||||
|
||||
|
||||
## Stuck on `This version of Mac OS X is not supported on this platform` or (🚫) Prohibited Symbol
|
||||
|
||||
This means macOS has detected an SMBIOS it does not support. To resolve this, ensure you're booting OpenCore **before** the macOS installer in the boot picker. Reminder that the option will be called `EFI Boot`.
|
||||
|
||||
Once you've booted OpenCore at least once, your hardware should now auto-boot it until either an NVRAM reset occurs, or you remove the drive with OpenCore installed.
|
||||
|
||||
However, if the 🚫 Symbol only appears after the boot process has already started (the bootscreen appears/verbose boot starts), it could mean that your USB drive has failed to pass macOS' integrity checks. To resolve this, create a new installer using a different USB drive (preferably of a different model.)
|
||||
|
||||
## Cannot boot macOS without the USB
|
||||
|
||||
By default, the OpenCore Patcher won't install OpenCore onto the internal drive itself during installs.
|
||||
|
||||
After installing macOS, OpenCore Legacy Patcher should automatically prompt you to install OpenCore onto the internal drive. However, if it doesn't show the prompt, you'll need to either [manually transfer](https://dortania.github.io/OpenCore-Post-Install/universal/oc2hdd.html) OpenCore to the internal drive's EFI or Build and Install again and select your internal drive.
|
||||
|
||||
Reminder that once this is done, you'll need to select OpenCore in the boot picker again for your hardware to remember this entry and auto boot from then on.
|
||||
|
||||
## Infinite Recovery OS Booting
|
||||
|
||||
With OpenCore Legacy Patcher, we rely on Apple Secure Boot to ensure OS updates work correctly and reliably with Big Sur. However this installs NVRAM variables that will confuse your Mac if not running with OpenCore. To resolve this, simply uninstall OpenCore and [reset NVRAM](https://support.apple.com/en-mide/HT201255).
|
||||
|
||||
* Note: Machines with modified root volumes will also result in an infinite recovery loop until integrity is restored.
|
||||
|
||||
## System version mismatch error when root patching
|
||||
|
||||
Updates from now on modify the system volume already while downloading, which can lead to broken patches out of a sudden as well as a "version mismatch" error while root patching, since the operating system gets into a liminal state between two versions. The "version mismatch" error is a safeguard preventing OCLP from patching on a system that is in a weird liminal state, to avoid leading to a very likely boot failure.
|
||||
|
||||
Currently there is a "PurgePendingUpdate" tool available [on the Discord server](https://discord.com/channels/417165963327176704/1037474131526029362/1255993208966742108) you can download and then run it in Terminal, to get rid of a pending update. This may be integrated into OCLP later on, however there is currently no ETA.
|
||||
|
||||
Disabling automatic macOS updates is extremely recommended once recovered, to prevent it from happening again.
|
||||
|
||||
## Stuck on boot after root patching
|
||||
|
||||
Boot into recovery by pressing space when your disk is selected on the OCLP bootpicker (if you have it hidden, hold ESC while starting up)
|
||||
|
||||
* **Note:** If your disk name is something else than "Macintosh HD", make sure to change the path accordingly. You can figure out your disk name by typing `ls /Volumes`.
|
||||
|
||||
Go into terminal and first mount the disk by typing
|
||||
```sh
|
||||
mount -uw "/Volumes/Macintosh HD"
|
||||
```
|
||||
Then revert the snapshot
|
||||
```sh
|
||||
bless --mount "/Volumes/Macintosh HD" --bootefi --last-sealed-snapshot
|
||||
```
|
||||
Now we're going to clean the /Library/Extensions folder from offending kexts while keeping needed ones.
|
||||
|
||||
Run the following and **make sure to type it carefully**
|
||||
|
||||
::: warning
|
||||
If you have **FileVault 2 enabled**, you will need to mount the Data volume first. This can be done in Disk Utility by locating your macOS volume name, selecting its Data volume, and selecting the Mount option in the toolbar.
|
||||
:::
|
||||
|
||||
```sh
|
||||
cd "/Volumes/Macintosh HD - Data/Library/Extensions" && ls | grep -v "HighPoint*\|SoftRAID*" | xargs rm -rf
|
||||
```
|
||||
|
||||
Then restart and now your system should be restored to the unpatched snapshot and should be able to boot again.
|
||||
|
||||
## "Unable to resolve dependencies, error code 71" when root patching
|
||||
|
||||
If you're getting this error, it typically means you have some offending kernel extensions, to fix this you will have to clear them.
|
||||
|
||||
Semi-automated way:
|
||||
|
||||
1. Open Terminal
|
||||
2. Type `sudo zsh`
|
||||
3. Type `cd "/Volumes/Macintosh HD/Library/Extensions" && ls | grep -v "HighPoint*\|SoftRAID*" | xargs rm -rf`
|
||||
* Make sure to rename "Macintosh HD" to what your drive name is
|
||||
4. Run OCLP root patcher again
|
||||
|
||||
Manual way:
|
||||
|
||||
1. Navigate to /Library/Extensions
|
||||
2. Delete everything **except** HighPointIOP.kext, HighPointRR.kext and SoftRAID.kext
|
||||
3. Run OCLP root patcher again
|
||||
|
||||
If there is no success, navigate to "/Library/Developer/KDKs" and delete everything.
|
||||
|
||||
If still no success, type `sudo bless --mount "/Volumes/Macintosh HD/" --bootefi --last-sealed-snapshot`
|
||||
* Make sure again to rename "Macintosh HD" to what your drive name is
|
||||
|
||||
Run OCLP root patcher again.
|
||||
|
||||
## Reboot when entering Hibernation (`Sleep Wake Failure`)
|
||||
|
||||
[Known issue on some models](https://github.com/dortania/Opencore-Legacy-Patcher/issues/72), a temporary fix is to disable Hibernation by executing the following command in the terminal:
|
||||
|
||||
```
|
||||
sudo pmset -a hibernatemode 0
|
||||
```
|
||||
|
||||
## How to Boot Recovery through OpenCore Legacy Patcher
|
||||
|
||||
By default, the patcher will try to hide extra boot options such as recovery from the user. To make them appear, simply press the `Spacebar` key while inside OpenCore's Picker to list all boot options.
|
||||
|
||||
## Stuck on "Your Mac needs a firmware update"
|
||||
|
||||
Full error: "Your Mac needs a firmware update in order to install to this Volume. Please select a Mac OS Extended (Journaled) volume instead."
|
||||
|
||||
This error occurs when macOS determines that the current firmware does not have full APFS support. To resolve this, when installing OpenCore, head to "Patcher Settings" and enable "Moderate SMBIOS Patching" or higher. This will ensure that the firmware reported will show support for full APFS capabilities.
|
||||
|
||||
## No Brightness Control
|
||||
|
||||
With OCLP v0.0.22, we've added support for brightness control on many models. However, some users may have noticed that their brightness keys do not work.
|
||||
|
||||
As a work-around, we recommend users try out the below app:
|
||||
|
||||
* [Brightness Slider](https://actproductions.net/free-apps/brightness-slider/)
|
||||
|
||||
## Cannot connect Wi-Fi on Monterey with legacy cards
|
||||
|
||||
With OCLP v0.2.5, we've added support for legacy Wi-Fi on Monterey. However, some users may have noticed that they can't connect to wireless networks.
|
||||
|
||||
To work-around this, we recommend that users manually connect using the "Other" option in the Wi-Fi menu bar or manually adding the network in the "Network" preference pane.
|
||||
|
||||
## No Graphics Acceleration
|
||||
|
||||
In macOS, GPU drivers are often dropped from the OS with each major release of it. With macOS Big Sur, currently, all non-Metal GPUs require additional patches to gain acceleration. In addition, macOS Monterey removed Graphics Drivers for both Intel Ivy Bridge and NVIDIA Kepler graphics processors.
|
||||
|
||||
If you're using OCLP v0.4.4, you should have been prompted to install Root Volume patches after the first boot from installation of macOS. If you need to do this manually, you can do so within the patcher app. Once rebooted, acceleration will be re-enabled as well as brightness control for laptops.
|
||||
|
||||
## Black Screen on MacBookPro11,3 in macOS Monterey
|
||||
|
||||
Due to Apple dropping NVIDIA Kepler support in macOS Monterey, [MacBookPro11,3's GMUX has difficulties switching back to the iGPU to display macOS correctly.](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/522) To work-around this issue, boot the MacBookPro11,3 in Safe Mode and once macOS is installed, run OCLP's Post Install Root Patches to enable GPU Acceleration for the NVIDIA dGPU.
|
||||
|
||||
* Safe Mode can be started by holding `Shift` + `Enter` when selecting macOS Monterey in OCLP's Boot Menu.
|
||||
|
||||
## No DisplayPort Output on Mac Pros with NVIDIA Kepler
|
||||
|
||||
If you're having trouble with DisplayPort output on Mac Pros, try enabling Minimal Spoofing in Settings -> SMBIOS Settings and rebuild/install OpenCore. This will trick macOS drivers into thinking you have a newer MacPro7,1 and resolve the issue.
|
||||
|
||||

|
||||
|
||||
## Volume Hash Mismatch Error in macOS Monterey
|
||||
|
||||
A semi-common popup some users face is the "Volume Hash Mismatch" error:
|
||||
|
||||
<p align="center">
|
||||
<img src="./images/Hash-Mismatch.png">
|
||||
</p>
|
||||
|
||||
What this error signifies is that the OS detects that the boot volume's hash does not match what the OS is expecting, this error is generally cosmetic and can be ignored. However if your system starts to crash spontaneously shortly after, you'll want to reinstall macOS fresh without importing any data at first.
|
||||
|
||||
* Note that this bug affects native Macs as well and is not due to issues with unsupported Macs: [OSX Daily: “Volume Hash Mismatch” Error in MacOS Monterey](https://osxdaily.com/2021/11/10/volume-hash-mismatch-error-in-macos-monterey/)
|
||||
|
||||
Additionally, it can help to disable FeatureUnlock in Settings -> Misc Settings as this tool can be strenuous on systems with weaker memory stability.
|
||||
|
||||
## Cannot Disable SIP in recoveryOS
|
||||
|
||||
With OCLP, the patcher will always overwrite the current SIP value on boot to ensure that users don't brick an installation after an NVRAM reset. However, for users wanting to disable SIP entirely, this can be done easily.
|
||||
|
||||
Head into the GUI, go to Patcher Settings, and toggle the bits you need disabled from SIP:
|
||||
|
||||
| SIP Enabled | SIP Lowered (Root Patching) | SIP Disabled |
|
||||
| :--- | :--- | :--- |
|
||||
|  |  |  |
|
||||
|
||||
## Intermediate issues with USB 1.1 and Bluetooth on MacPro3,1 - MacPro5,1
|
||||
|
||||
For those experiencing issues with USB 1.1 devices (such as mice, keyboards and bluetooth chipsets), macOS Big Sur and newer have weakened OS-side reliability for the UHCI controller in older Mac Pros.
|
||||
|
||||
* UHCI is a USB 1.1 controller that is hooked together with the USB 2.0 ports in your system. Whenever a USB 1.1 device is detected, the UHCI controller is given ownership of the device at a hardware/firmware level.
|
||||
* EHCI is the USB 2.0 controller in older Mac Pros
|
||||
|
||||
Because of this, we recommend placing a USB 2.0/3.0 hub between your devices and the port on the Mac Pro. UHCI and EHCI cannot both be used at once, so using a USB hub will always force the EHCI controller on.
|
||||
|
||||
* Alternatively, you can try cold-starting the hardware and see if macOS recognizes the UHCI controller properly.
|
||||
|
||||
## Stuck on "Less than a minute remaining..."
|
||||
|
||||
A common area for systems to get "stuck", namely for units that are missing the `AES` CPU instruction/older mobile hardware. During this stage, a lot of heavy cryptography is performed, which can make systems appear to be stuck. In reality they are working quite hard to finish up the installation.
|
||||
|
||||
Because this step can take a few hours or more depending on drive speeds, be patient at this stage and do not manually power off or reboot your machine as this will break the installation and require you to reinstall. If you think your system has stalled, press the Caps Lock key. If the light turns on, your system is busy and not actually frozen.
|
||||
|
||||
## No acceleration after a Metal GPU swap on Mac Pro
|
||||
|
||||
If you finished installing Monterey with the original card installed (to see bootpicker for example) and swapped your GPU to a Metal supported one, you may notice that you're missing acceleration. To fix this, open OCLP and revert root patches to get your Metal-supported GPU work again.
|
||||
|
||||
Alternatively, you can remove "AutoPkg-Assets.pkg" from /Library/Packages on the USB drive before proceeding with the installation. To see the folder, enable hidden files with `Command` + `Shift` + `.`
|
||||
|
||||
The reason for this is that the autopatcher will assume that you will be using the original graphics card and therefore does non-metal patching, which includes removing some drivers for other cards. This causes Metal cards to not accelerate after swapping.
|
||||
|
||||
## Keyboard, Mouse and Trackpad not working in installer or after update
|
||||
|
||||
For Macs using legacy USB 1.1 controllers, OpenCore Legacy Patcher can only restore support once it has performed root volume patches. Thus to install macOS, you need to hook up a USB hub between your Mac and Keyboard/Mouse.
|
||||
|
||||
::: warning Note
|
||||
|
||||
In macOS Sonoma, this seems to have been further weakened and some hubs may not be functional.
|
||||
|
||||
Alternative way is making sure to enable "Remote Login" in General -> Sharing before updating, which will enable SSH. That means you can take control using Terminal in another system by typing `ssh username@lan-ip-address` and your password. After that run Post Install Volume Patching by typing `/Applications/OpenCore-Patcher.app/Contents/MacOS/OpenCore-Patcher --patch_sys_vol` and finally `sudo reboot`.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
|
||||
* For MacBook users, you'll need to find an external keyboard/mouse in addition to the USB hub
|
||||
|
||||
More information can be found here:
|
||||
|
||||
* [Legacy UHCI/OHCI support in Ventura #1021](https://github.com/dortania/OpenCore-Legacy-Patcher/issues/1021)
|
||||
|
||||
Applicable models include:
|
||||
|
||||
| Family | Year | Model | Notes |
|
||||
| :---------- | :--------------------| :---------------------------- | :----------------------------------------------- |
|
||||
| MacBook | Mid 2010 and older | MacBook5,1 - MacBook7,1 | |
|
||||
| MacBook Air | Late 2010 and older | MacBookAir2,1 - MacBookAir3,x | |
|
||||
| MacBook Pro | Mid 2010 and older | MacBookPro4,1 - MacBookPro7,x | Excludes Mid 2010 15" and 17" (MacBookPro6,x) |
|
||||
| iMac | Late 2009 and older | iMac7,1 - iMac10,x | Excludes Core i5/7 27" late 2009 iMac (iMac11,1) |
|
||||
| Mac mini | Mid 2011 and older | Macmini3,1 - Macmini5,x | |
|
||||
| Mac Pro | Mid 2010 and older | MacPro3,1 - MacPro5,1 | |
|
||||
|
||||
|
||||

|
||||
|
||||
## No T1 functionality after installing Sonoma or newer
|
||||
|
||||
If you notice your Touchbar etc not working, this means loss of T1 functionality.
|
||||
|
||||
Wiping the entire disk using Disk Utility with Sonoma or newer causes the T1 firmware to be removed, which due to removed support, the macOS Sonoma+ installer will not restore. To restore T1 functionality, Ventura or older has to be reinstalled. This can be done in another volume or external disk as well, as long as the OS is booted once. After this you can wipe the old OS or unplug the external disk.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Uninstalling OpenCore
|
||||
|
||||
To remove OpenCore:
|
||||
## Uninstalling the bootloader
|
||||
|
||||
1. Remove OpenCore either from the USB or internal drive
|
||||
|
||||
@@ -11,4 +11,13 @@ To remove OpenCore:
|
||||
|
||||
2. [Reset NVRAM](https://support.apple.com/HT204063)
|
||||
|
||||
Note that if you are on Big Sur when you remove the EFI folder, your Mac will no longer boot and show the "prohibited" symbol. Be ready to install an older version of macOS before you uninstall OpenCore.
|
||||
:::warning
|
||||
|
||||
Note that after you remove OpenCore, your Mac will no longer boot and show the "prohibited" symbol. Be ready to install a natively-supported version of macOS before you uninstall OpenCore.
|
||||
|
||||
* This does not apply to native Macs just using OpenCore to achieve features like AirPlay to Mac and Sidecar, but it is still recommended to reinstall macOS after removing OpenCore, if using SMBIOS spoofing to enable Universal Control and other features.
|
||||
:::
|
||||
|
||||
## Uninstalling the application
|
||||
|
||||
If you want to remove the application without reinstalling the OS, navigate to `/Library/Application Support/` and delete the Dortania folder.
|
||||
|
||||
@@ -12,7 +12,7 @@ If you meet all the requirements, in most cases you can go to Display Preference
|
||||
|
||||
| Display Preferences | Universal Control settings |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
|
||||
Most Mac models from 2011 and above should work out of the box. However, older Macs like the 2008-2011 MacBook Pros require upgrading the Wi-Fi/Bluetooth card to a newer model. More info in the [requirements section.](#requirements-for-universal-control)
|
||||
@@ -51,8 +51,7 @@ Note: For AirPort upgrades, only the best/newest cards are listed.
|
||||
|
||||
| SMBIOS | WiFi/BT version | UC OOB | Comment |
|
||||
|------------|-----------------|------------|---------|
|
||||
| MacBook4,1 | Wi-Fi 4 / BT 2.0 EDR | <span style="color:red"> NO </span> | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CS2 card |
|
||||
| MacBook5,1 | ^^ | ^^ | <span style="color:red"> Use a Broadcom USB Bluetooth 4.0+ Dongle </span> |
|
||||
| MacBook5,1 | Wi-Fi 4 / BT 2.0 EDR | <span style="color:red"> NO </span> | Use a Broadcom USB Bluetooth 4.0+ Dongle </span> |
|
||||
| MacBook5,2 | WiFi 4 / BT 2.1 EDR | ^^ | Replace stock AirPort card with an mPCIE + USB Connector Adapter board with a BCM94360CS2 card |
|
||||
| MacBook6,1 | ^^ | ^^ | Replace stock AirPort card with a BCM94331PCIEBT4CAX/BCM94331PCIEBT4 card |
|
||||
| MacBook7,1 | ^^ | ^^ | ^^ |
|
||||
@@ -184,7 +183,7 @@ The following models are blacklisted from using Universal Control by Apple:
|
||||
- Macmini7,x - Mac mini 2014
|
||||
- MacPro6,x - Mac Pro Late 2013
|
||||
|
||||
The hardware in these models are capable of supporting Universal Control, but due to blacklisting, the only solution to use Universal Control on these models is to spoof their SMBIOS. SMBIOS spoofing essentially fools some aspects of macOS to think they are running on a different machine.
|
||||
The hardware in these models are capable of supporting Universal Control, but due to blacklisting, the only solution to use Universal Control on these models is to spoof their SMBIOS. SMBIOS spoofing essentially fools some aspects of macOS to think they are running on a different machine.
|
||||
|
||||
With SMBIOS Spoofing, the Universal Control handshake recognizes a different SMBIOS and thus grants a blacklisted Mac to connect to other Macs and iPads with Universal Control.
|
||||
|
||||
@@ -205,17 +204,49 @@ Before we continue, please keep in mind that SMBIOS Spoofing is an advanced feat
|
||||
|
||||
Ventura has dropped more models which includes all of the blacklisted Macs in question, making the procedure slightly different. It is important to follow the guide for the version you're on, failing to do so is likely to cause boot issues.
|
||||
|
||||
::: details macOS Sonoma
|
||||
|
||||
Firstly run OpenCore Legacy Patcher.
|
||||
|
||||
Then go to **Settings** and **SMBIOS** tab, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model **one listed next to your native model in the table for spoofed models below.**
|
||||
|
||||
Notice that "Allow native models" and "Allow Native Spoofs" **are NOT** enabled unlike on Monterey, this is on purpose. They are no longer relevant on Sonoma and enabling them will cause boot issues.
|
||||
|
||||
| Main Settings view | SMBIOS settings |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|
||||
|
||||
|
||||
::: details Table for spoofed models (click to expand)
|
||||
|
||||
Spoofing to any model with native Sonoma support should work, but these are the earliest Macs natively supported by Sonoma and thus chosen for the sake of simplicity.
|
||||
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Ventura as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|-------------|---------------|--------------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro15,2 |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro15,2 |
|
||||
| iMac Late 2015 21" | iMac16,x | iMac19,2 |
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||
|
||||
:::
|
||||
|
||||
::: details macOS Ventura
|
||||
|
||||
Firstly run the GUI version of OpenCore Legacy Patcher.
|
||||
Firstly run OpenCore Legacy Patcher.
|
||||
|
||||
Then go to **Settings**, go to **SMBIOS Settings**, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model **one listed next to your native model in the table for spoofed models below.**
|
||||
Then go to **Settings** and **SMBIOS** tab, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model **one listed next to your native model in the table for spoofed models below.**
|
||||
|
||||
Notice that "Allow native models" and "Allow Native Spoofs" **are NOT** enabled unlike on Monterey, this is on purpose. They are no longer relevant on Ventura and enabling them will cause boot issues.
|
||||
|
||||
| Main Settings view | SMBIOS settings |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
|
||||
|
||||
@@ -226,27 +257,29 @@ Spoofing to any model with native Ventura support should work, but these are the
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Ventura as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS | Tested | Tested by |
|
||||
|-------------|---------------|--------------|--------|-----------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro14,1 | ^^ | ^^ |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro14,3 | ^^ | ^^
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|-------------|---------------|--------------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro14,1 |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro14,3 |
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 |
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||
|
||||
:::
|
||||
|
||||
::: details macOS Monterey
|
||||
|
||||
Firstly, run the GUI version of OpenCore Legacy Patcher. Secondly, go to **Settings** and tick **Allow native models**.
|
||||
Firstly, run OpenCore Legacy Patcher. Secondly, go to **Settings** then the **App** tab and tick **Allow native models**.
|
||||
|
||||
Then, go to **SMBIOS Settings**, tick **Allow Native Spoofs**, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model to **one listed next to your native model in the table for spoofed models below.**
|
||||
[](./images/OCLP-App-Allow-Native-Models.png)
|
||||
|
||||
Then, go to **SMBIOS** tab, tick **Allow spoofing native Macs**, set SMBIOS Spoof Level to **Moderate**. Set SMBIOS Spoof Model to **one listed next to your native model in the table for spoofed models below.**
|
||||
|
||||
|
||||
| Main Settings view | SMBIOS settings |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
|
||||
::: details Table for spoofed models (click to expand)
|
||||
@@ -256,14 +289,14 @@ Any model after the list of officially blacklisted Macs should be supported, but
|
||||
**Reminder:** Macs that are not listed on this table work without spoofing, including systems that do not natively support Monterey, as long as the other requirements are met, since they aren't blacklisted.
|
||||
|
||||
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS | Tested | Tested by |
|
||||
|-------------|---------------|--------------|--------|-----------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 | <span style="color:#30BCD5"> YES </span> | Hzlph |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro13,1 | ^^ | ^^ |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 | ^^ | ^^
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 | ^^ | ^^
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 | <span style="color:red"> NO </span> | N/A |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 | <span style="color:#30BCD5"> YES </span> | Crystall1nedev |
|
||||
| Mac by name | Native SMBIOS | Spoof SMBIOS |
|
||||
|-------------|---------------|--------------|
|
||||
| MacBook Air Early 2015 11" / 13" | MacBookAir7,x | MacBookAir8,1 |
|
||||
| MacBook Pro Early 2015 13" | MacBookPro12,x | MacBookPro13,1 |
|
||||
| MacBook Pro Mid 2015 15" | MacBookPro11,4 / 11,5 | MacBookPro13,3 |
|
||||
| iMac Late 2015 21" | iMac16,x | iMac18,2 |
|
||||
| Mac mini Late 2014 | Macmini7,x | MacMini8,1 |
|
||||
| Mac Pro Late 2013 | MacPro6,x | MacPro7,1 |
|
||||
|
||||
:::
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Updating OpenCore and Patches
|
||||
|
||||
With OpenCore Legacy Patcher, there's generally very little reason for users to update the OpenCore installation on their machine unless you feel there's a benefit with new versions for your setup, e.g. Bluetooth has stopped working with a new macOS update.
|
||||
With OpenCore Legacy Patcher, there's generally very little reason for users to update the OpenCore installation on their machine unless you feel there's a benefit with new versions for your setup, e.g. Bluetooth has stopped working with a new macOS update.
|
||||
|
||||
For those who do wish to update, simply [download the latest release](https://github.com/dortania/OpenCore-Legacy-Patcher/releases) and rerun the patcher:
|
||||
|
||||

|
||||

|
||||
|
||||
Then, rebuild your OpenCore build and install again. OpenCore Will now be updated!
|
||||
|
||||
@@ -17,6 +17,6 @@ nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version
|
||||
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
From this, we can see that we're running a RELEASE version of OpenCore 0.6.8 built on March 27th, 2021 with Patcher Version 0.0.20!
|
||||
From this, we can see that we're running a RELEASE version of OpenCore 0.8.0 built on April 18th, 2022 with Patcher Version 0.4.5!
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||

|
||||
# macOS Ventura Support
|
||||
|
||||

|
||||
|
||||
With the release of OpenCore Legacy Patcher v0.5.0 and newer, early support for macOS Ventura has been implemented for most Metal-capable Macs. This page will be used to inform users regarding current issues and will be updated as new patch sets are developed and added to our patcher.
|
||||
|
||||
@@ -7,7 +9,7 @@ With the release of OpenCore Legacy Patcher v0.5.0 and newer, early support for
|
||||
Ventura's release dropped a large amount of Intel hardware, thus requiring the usage of OpenCore Legacy Patcher on the following models (in addition to previously removed models):
|
||||
|
||||
* iMac16,1 (21.5-inch, Late 2015)
|
||||
* iMac16,2 (21.5-inch 4K, Late 2015)
|
||||
* iMac16,2 (21.5-inch and 21.5-inch 4K, Late 2015)
|
||||
* iMac17,1 (27-inch 5K, Late 2015)
|
||||
* MacBook9,1 (12-inch, Early 2016)
|
||||
* MacBookAir7,1 (11-inch, Early 2015)
|
||||
@@ -24,7 +26,7 @@ Ventura's release dropped a large amount of Intel hardware, thus requiring the u
|
||||
|
||||
## Current status
|
||||
|
||||
<img width="625" alt="" src="../images/OCLP-060-Initial-Support.png">
|
||||
<img width="625" alt="" src="./images/OCLP-060-Initial-Support.png">
|
||||
|
||||
For older hardware, see below sections:
|
||||
|
||||
@@ -64,7 +66,7 @@ For Penryn systems and pre-2013 Mac Pros, USB 1.1 support was outright removed i
|
||||
|
||||
With OpenCore Legacy Patcher v0.6.0, basic support has been implemented via Root Volume patching. However due to this, users will need to use a USB hub for installation and post-OS updates when patches are cleaned:
|
||||
|
||||

|
||||

|
||||
|
||||
::: warning The following systems rely on USB 1.1
|
||||
|
||||
@@ -78,11 +80,6 @@ With OpenCore Legacy Patcher v0.6.0, basic support has been implemented via Root
|
||||
|
||||
:::
|
||||
|
||||
### Ethernet issue with Early 2008 Mac Pro
|
||||
|
||||
MacPro3,1 suffers from the Ethernet driver dying after returning from sleep, current workaround is to use a USB Ethernet adapter or disable sleep.
|
||||
|
||||
|
||||
::: details Legacy Wireless Support (Resolved in v0.6.0 and newer)
|
||||
|
||||
|
||||
@@ -132,7 +129,7 @@ The following GPUs are applicable:
|
||||
The following machines shipped stock with an unsupported GPU:
|
||||
|
||||
* iMac7,1 - iMac12,x
|
||||
* MacBook4,1 - MacBook7,1
|
||||
* MacBook5,1 - MacBook7,1
|
||||
* MacBookAir2,1 - MacBookAir4,x
|
||||
* MacBookPro4,1 - MacBookPro8,x
|
||||
* Macmini3,1 - Macmini5,x
|
||||
@@ -140,4 +137,4 @@ The following machines shipped stock with an unsupported GPU:
|
||||
* Xserve2,1 - Xserve3,1
|
||||
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
@@ -5,21 +5,20 @@ Many older Macs do not "officially" support UEFI Windows installations, leading
|
||||
|
||||
## Minimum Requirements
|
||||
|
||||
This guide will focus on the installation of Windows 10 without using Boot Camp Assistant. Windows 11 should also work, but its quirks will not be covered.
|
||||
This guide will focus on the installation of modern Windows (10/11) without using Boot Camp Assistant.
|
||||
|
||||
* Due to hardware and firmware limitations, UEFI Windows installations are only recommended on the following machines:
|
||||
|
||||
* 2015 MacBook or newer (MacBook8,x+)
|
||||
* 2011 MacBook Air or newer (MacBookAir4,x+)
|
||||
* 2011 MacBook Pro or newer (MacBookPro8,x+)
|
||||
* 2011 Mac mini or newer (Macmini5,x+)
|
||||
* 2009[^1] Mac Pro or newer (MacPro4,1+), upgraded GPU is preferred
|
||||
* 2010 iMac or newer (iMac11,x+), upgraded GPU is preferred
|
||||
* 2009[^2] Xserve (Xserve3,1), upgraded GPU is preferred
|
||||
* 2015 MacBook or newer (`MacBook8,x`+)
|
||||
* 2011 MacBook Air or newer (`MacBookAir4,x`+)
|
||||
* 2011 MacBook Pro or newer (`MacBookPro8,x`+)
|
||||
* 2011 Mac mini or newer (`Macmini5,x`+)
|
||||
* 2009* Mac Pro or newer (`MacPro4,1`+), upgraded GPU is preferred
|
||||
* 2010 iMac or newer (`iMac11,x`+), upgraded GPU is preferred
|
||||
* 2009* Xserve (`Xserve3,1`), upgraded GPU is preferred
|
||||
|
||||
|
||||
[^1]: MacPro4,1 and MacPro5,1 systems experience issues with the Windows installer, follow the DISM installation section for instructions.
|
||||
[^2]: Theoretically supported, not tested. Follow DISM installation section
|
||||
*`MacPro4,1`, `MacPro5,1`, and `Xserve3,1` systems experience issues with the Windows installer, follow the DISM installation section for instructions.
|
||||
|
||||
If your machine is not listed, UEFI Windows will likely still install, but you may face stability/driver issues.
|
||||
|
||||
@@ -33,13 +32,13 @@ The following is required for installation:
|
||||
|
||||
Open Disk Utility in macOS and format the USB Drive as ExFat with the Master Boot Record scheme:
|
||||
|
||||

|
||||

|
||||
|
||||
### Formatting the Target Drive
|
||||
|
||||
Next, select the drive you wish to install Windows in Disk Utility on and partition it as ExFat (If formatting the entire drive, ensure it's using the GUID Partition Table scheme):
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
:::warning
|
||||
@@ -56,7 +55,7 @@ Recommended size is 200MB and the partition format **must** be FAT32 for OpenCor
|
||||
* Note 2: Having different partitions for OpenCore is not required if the Windows boot files detected by the stock Bootpicker are removed. See "Removing the Windows option from the stock bootpicker" for further information.
|
||||
* Note 3: We recommend uninstalling OpenCore from the ESP/EFI Partition when you create this new OpenCore partition to avoid confusion when selecting OpenCore builds in the Mac's boot picker.
|
||||
|
||||

|
||||

|
||||
|
||||
## Creating the Windows Installer
|
||||
|
||||
@@ -68,7 +67,7 @@ The latest Windows installation images can be downloaded from Microsoft using th
|
||||
|
||||
Once the file is downloaded, mount the .iso image:
|
||||
|
||||

|
||||

|
||||
|
||||
Then open terminal and use the `rsync` command with the disk image set as the source and your USB drive set as the target. (Replace "CCCOMA_X64" with the mounted image's partition name, and replace "InstallWin10" with your USB Drive's name).
|
||||
|
||||
@@ -76,29 +75,37 @@ Then open terminal and use the `rsync` command with the disk image set as the so
|
||||
rsync -r -P /Volumes/CCCOMA_X64/ /Volumes/InstallWin10
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
The `rsync` command will take some time, so get some coffee and sit back. Once finished, the root of the USB drive should look as follows:
|
||||
|
||||

|
||||

|
||||
|
||||
* Ensure that these folders and files are in the root of the USB drive, otherwise the USB will not boot.
|
||||
|
||||
|
||||
## Installation Process
|
||||
|
||||
Once you reboot your machine, you should see a new boot option in the OCLP Bootpicker labelled as "EFI Boot". It may or may not have the Boot Camp icon.
|
||||
Once you reboot your machine, you should see a new boot option in the OCLP Bootpicker labelled as "EFI Boot" or "Windows". It may or may not have the Boot Camp icon.
|
||||
|
||||
:::warning
|
||||
|
||||
If you aren't booted into OCLP, you may see two boot options labelled "Windows" and "EFI Boot". Do not choose either of the options and boot into OCLP to continue.
|
||||
If you aren't booted into OCLP, you may see **two** boot options labelled "Windows" and "EFI Boot". Do not choose either of the options and boot into OCLP to continue.
|
||||
|
||||
:::
|
||||
|
||||
|
||||
|
||||
### Installation: Microsoft Method
|
||||
|
||||
Once booted into the Windows installer, proceed as you normally would on any Windows computer. If you see an error message containing “Windows could not prepare the computer to boot into the next phase of installation”, please follow the next portion of this guide (DISM Installation).
|
||||
|
||||
::: details Installing Windows 11
|
||||
|
||||
If you are installing Windows 11, you will need to [modify the Windows Setup](https://www.bleepingcomputer.com/news/microsoft/how-to-bypass-the-windows-11-tpm-20-requirement/) to allow installation on unsupported machines.
|
||||
|
||||
:::
|
||||
|
||||
### Installation: DISM Deployment Method
|
||||
|
||||
Once booted into the Windows installer, proceed as you normally would until you reach the "Where do you want to install Windows" disk formatting section.
|
||||
@@ -106,33 +113,33 @@ Once booted into the Windows installer, proceed as you normally would until you
|
||||
When you are prompted to select a drive, select your desired partition and delete it using "Delete". If you want to install Windows to an empty drive, erase every partition currently on the desired drive.
|
||||
After your drive/partition is erased, press "New" to create the Windows system partitions.
|
||||
|
||||

|
||||

|
||||
|
||||
You will be prompted to confirm the creation of the system partitions, press "OK".
|
||||
|
||||

|
||||

|
||||
|
||||
Once the partitions are created, select the main (largest) partition and press "Format". This will format the partition using the NFTS file system.
|
||||
|
||||

|
||||

|
||||
|
||||
After the installer formats the partition, open up the Command Prompt by pressing SHIFT + F10. Then run the `diskpart` command, and `list vol`. This will produce a list of volumes in your system, make sure to keep track of the drive letters of the main Windows partition (largest, NTFS), the EFI partition (100MB, FAT32), and the Windows installer (Usually Drive D). Run `exit` to close diskpart
|
||||
|
||||

|
||||

|
||||
|
||||
Now, get a list of available Windows editions by running `dism /Get-WimInfo /WimFile:D:\Sources\install.wim` (substituting D with the Installer Drive Letter). This guide will use Option 6 for Windows 10 Pro.
|
||||
|
||||

|
||||

|
||||
|
||||
You can now start the deployment process. Run `dism /Apply-Image /ImageFile:D:\Sources\install.wim /index:6 /ApplyDir:E:`, replacing "D" with the Installer Drive Letter, "6" with the Windows edition option, and "E" with the Windows Partition Drive Letter.
|
||||
|
||||

|
||||

|
||||
|
||||
Once `dism` finishes its thing, run `bcdboot E:\Windows`, substituting "E" for the drive letter of the main Windows partition to create the boot files.
|
||||
|
||||

|
||||

|
||||
|
||||
Windows is now installed. It should be recognized as "EFI Boot" with a Boot Camp icon in the OCLP Bootpicker.
|
||||
Windows is now installed. It should be recognized as "EFI Boot" or "Windows" with a Boot Camp icon in the OCLP Bootpicker.
|
||||
|
||||
:::warning
|
||||
|
||||
@@ -148,11 +155,11 @@ Start up a command prompt window in the Windows Setup environment by running `cm
|
||||
|
||||
Next, enter the EFI Folder by running `C:`, substituting "C" for the EFI Partition Drive Letter. Then run `cd EFI` to enter the EFI Partition. Then, run `rmdir Boot /S /Q` to remove the boot files that can be detected by the stock Bootpicker. The OCLP Picker will still be able to detect and boot Windows.
|
||||
|
||||

|
||||

|
||||
|
||||
You can verify that the `Boot` folder is removed by running the `dir` command:
|
||||
|
||||

|
||||

|
||||
|
||||
If, for whatever reason, you are not able to remove the boot files from the Windows setup, shut down your system, boot into macOS, mount your EFI partition with [MountEFI](https://github.com/corpnewt/MountEFI), and remove the `Boot` folder (it should have a recent file modification date, and contain `Bootx64.efi`).
|
||||
|
||||
@@ -169,11 +176,11 @@ Once Brigadier is downloaded, move it to your desktop for easy access.
|
||||
|
||||
Open up a command prompt window as a standard user and run `cd desktop`.
|
||||
|
||||

|
||||

|
||||
|
||||
Then run `.\brigadier.exe --model=MODEL1,1`, replacing "MODEL1,1" with your machine's SMBIOS model.
|
||||
|
||||

|
||||

|
||||
|
||||
Once the Boot Camp software is downloaded, you can install it by executing `Setup.exe` or `\Drivers\Apple\BootCamp.msi` (`BootCamp64.msi` if present).
|
||||
|
||||
@@ -187,11 +194,11 @@ Once Brigadier is downloaded, move it to your desktop for easy access.
|
||||
|
||||
Open up a command prompt window as a standard user and run `cd desktop`.
|
||||
|
||||

|
||||

|
||||
|
||||
Then run `.\brigadier.exe --model=MacPro7,1`. This will download the latest BootCamp 6 package.
|
||||
|
||||

|
||||

|
||||
|
||||
Once the Boot Camp software is downloaded, you can install Boot Camp 6 by executing `\Drivers\Apple\BootCamp.msi` in an administrator command prompt window.
|
||||
|
||||
@@ -203,7 +210,7 @@ If you built OpenCore with Moderate or higher SMBIOS spoofing, you'll get an err
|
||||
|
||||
| Setup.exe | BootCamp.msi |
|
||||
| :--- | :--- |
|
||||
|  |  |
|
||||
|  |  |
|
||||
|
||||
::: details BootCamp.msi quirks
|
||||
|
||||
@@ -221,4 +228,8 @@ You can also open `Properties` on the file to change the compatibility to `Previ
|
||||
|
||||
### iMac12,x Bluescreen after driver installation
|
||||
|
||||
Currently Intel's iGPU drivers for the HD 3000 series do not support UEFI booting in Windows. The recommended solution is to simply disable the iGPU: [iMac 12,1 Windows 10 Boot Loop – Fix Intel Graphics issue](https://zzq.org/?p=39)
|
||||
Intel's iGPU drivers for the HD 3000 series do not support UEFI booting in Windows. The recommended solution is to simply disable the iGPU: [iMac 12,1 Windows 10 Boot Loop – Fix Intel Graphics issue](https://zzq.org/?p=39)
|
||||
|
||||
### NVIDIA Tesla Black Screen after driver installation
|
||||
|
||||
The NVIDIA Tesla GPUs found in 2008-2010 Macs do not support UEFI booting in Windows. You cannot use UEFI Windows without low-level patching on these machines.
|
||||
BIN
docs/images/BOOTCAMP-1.png
Normal file
|
After Width: | Height: | Size: 178 KiB |
BIN
docs/images/BOOTCAMP-2.png
Normal file
|
After Width: | Height: | Size: 312 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
docs/images/Error-No-Permission-To-Save.png
Normal file
|
After Width: | Height: | Size: 267 KiB |
|
Before Width: | Height: | Size: 2.9 MiB After Width: | Height: | Size: 2.9 MiB |
|
Before Width: | Height: | Size: 3.1 MiB After Width: | Height: | Size: 3.1 MiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 270 KiB After Width: | Height: | Size: 270 KiB |
|
Before Width: | Height: | Size: 129 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 782 KiB After Width: | Height: | Size: 782 KiB |
|
Before Width: | Height: | Size: 984 KiB After Width: | Height: | Size: 984 KiB |
BIN
docs/images/OCLP-App-Allow-Native-Models.png
Normal file
|
After Width: | Height: | Size: 504 KiB |
BIN
docs/images/OCLP-GUI-Build-Finished.png
Normal file
|
After Width: | Height: | Size: 382 KiB |
BIN
docs/images/OCLP-GUI-Build-Start.png
Normal file
|
After Width: | Height: | Size: 446 KiB |
BIN
docs/images/OCLP-GUI-Create-Installer-Menu.png
Normal file
|
After Width: | Height: | Size: 368 KiB |
BIN
docs/images/OCLP-GUI-EFI-Finished-Install.png
Normal file
|
After Width: | Height: | Size: 268 KiB |
|
Before Width: | Height: | Size: 246 KiB After Width: | Height: | Size: 246 KiB |
BIN
docs/images/OCLP-GUI-EFI-Select-Disk.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
docs/images/OCLP-GUI-EFI-Select-Partition.png
Normal file
|
After Width: | Height: | Size: 156 KiB |