I'm building an electron app. So far everything was good, before I tried to upload my app to Mac App Store.
When building, signing and notarizing my app with apple certificates, everything works perfectly. I'm able to sign as Apple Developer ID.
When I tried to generate the pkg to upload to the Apple Mac Store, the MAS app crash.
I tried different combination of entitlements and provisions, but the latest one is:
package.json
"mac": {
"hardenedRuntime": true,
"gatekeeperAssess": false,
"entitlementsInherit": "build/entitlements.mas.inherit.plist",
"category": "public.app-category.productivity",
"icon": "build/icon.icns",
"type": "distribution",
"target": [
"mas",
"dmg"
]
},
"mas": {
"entitlements": "build/entitlements.mas.plist",
"entitlementsInherit": "build/entitlements.mas.inherit.plist",
"provisioningProfile": "build/embedded.provisionprofile"
},
entitlements.mas.plist
<?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>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.application-groups</key>
<array>
<string>xxx.com.company.app</string>
</array>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>
entitlements.mas.inherit.plist
<?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>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
About the provisionprofile, is one generated with the Apple Distribution Certificate.
When I run
pkgutil --check-signature dist/mas/myapp.app
Package "Company":
Status: signed by a certificate trusted by macOS
Certificate Chain:
1. Apple Distribution: MyCompany Inc (XXXXXXX)
The package is upload correctly using Transporter, but It get rejected in Apple Review as the app crash when opening.
The crash report doesn't generate any useful information (ar least for me)
Exception Type: EXC_CRASH (SIGKILL (Code Signature Invalid))
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: CODESIGNING 1
Triggered by Thread: 0
Thread 0 Crashed:
0 0x7ff7ffcffa2c 0x7ff7ffcfc000 + 14892
Thread 0 crashed with ARM Thread State (64-bit):
Error Formulating Crash Report:
dyld_process_snapshot_get_shared_cache failed
EOF
Related
I am currently using a plist to run a shell script.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.name.set</string>
<key>Program</key>
<string>/Users/username_here/Desktop/simple.sh</string>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>5</integer>
<key>StandardErrorPath</key>
<string>/tmp/com.name.example.stderr</string>
<key>StandardOutPath</key>
<string>/tmp/com.name.example.stdout</string>
</dict>
</plist>
This works! But when I change the program name to be
<string>/Desktop/simple.sh</string>
it doesn't run the script. also ~/Desktop/simple.sh does not work.
Is there a way to run the script without knowing the username and using an absolute path?
I am also getting this error message when I tail launchd.
com.apple.xpc.launchd[1] (com.name.example[8178]): Service could not initialize: 14F27: xpcproxy + 13421 [1402][AD0301C4-D364-31CE-8BA7-B5DBECE64D0A]: 0x2
Thanks!
Using a shell as arg0 and giving it a path relative to the user's home folder works for me:
<key>ProgramArguments</key>
<array>
<string>zsh</string>
<string>-c</string>
<string>~/CLI/scripts/list_open_jira_tickets --skip=5297 > ~/CLI/tmp/open_jira_tickets.txt</string>
</array>
If daemon is run as a per-user agent (installed in ~/Library/LaunchAgent) you can use a period get the relative path. Which would be the home folder (~/)
So you can do this:
<key>Program</key>
<string>./Desktop/simple.sh</string>
It might be nicer to save your program next to your plist:
./Library/LaunchAgents/simple.sh
I'm trying to install a beta app to an iOS device and am hosting the manifest.plist and IPA file on HTTPS with a self-signed certificate. When I hit the itms-services:// link, I get an error of "Cannot connect to <ip address>".
itms-services link:
itms-services://?action=download-manifest&url=https://10.0.1.2:1338/ipa/manifest.plist
plist:
<?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>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://10.0.1.2:1338/ipa/test.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.company.test</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>test</string>
</dict>
</dict>
</array>
</dict>
</plist>
Try adding your certificate to the trusted ones (probably, easiest thing to do is to mail a cer file to device and open it from standard mail app to install).
Another thing you need to make sure is that your server supports TLS 1.2 and Forward Secrecy.
You can use nscurl --ats-diagnostics https://example.com/app.ipa to check if everything done right.
Its possible:
Create the certificate file (export as DER encode X.509)
Access file from device via HTTP (like the manifest.plist in your example)
Agree to install it in device
Turn it on: https://support.apple.com/en-au/HT204477
I am trying to setup Yaws (installed via Homebrew) to start automatically under OS X Yosemite using the following PLIST:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ca.seidlitz.yaws</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>/usr/local/Cellar/yaws/1.98/bin/yaws --daemon --conf /usr/local/Cellar/yaws/1.98/etc/yaws/yaws.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local/opt/yaws</string>
<key>StandardOutPath</key>
<string>/tmp/yaws.log</string>
<key>StandardErrorPath</key>
<string>/tmp/yaws_err.log</string>
</dict>
</plist>
I tried to load this plist using sudo launchctl load /Library/LaunchDaemons/ca.seidlitz.yaws.plist
but with no luck. I don't get any error in /var/system.log, while the /tmp/yaws.log contains this error: "1> *** Terminating erlang (nonode#nohost)"
I also tried running it as daemon and in interactive mode. Daemon doesn't generate any errors in the log file but Yaws is not running.
Can anyone spot any issues with the plist?
You should make the /usr/local/Cellar/yaws/1.98/bin/yaws script executable if it isn't already, get rid of the sh -c invocation, and properly declare the yaws script and its arguments as separate strings, all like this:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ca.seidlitz.yaws</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/Cellar/yaws/1.98/bin/yaws</string>
<string>--daemon</string>
<string>--conf</string>
<string>/usr/local/Cellar/yaws/1.98/etc/yaws/yaws.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/tmp</string>
<key>StandardOutPath</key>
<string>/tmp/yaws.log</string>
<key>StandardErrorPath</key>
<string>/tmp/yaws_err.log</string>
</dict>
</plist>
I have a application run as a daemon. I put the application plist under under /Library/LaunchDaemons on iOS 8 device, and launch it by executing the command
launchctl load /Library/LaunchDaemons/com.mycompany.testapp.plist
In my laumchd plist Note that the application is running as a daemon by executing the command
I would like to make this application restart only when it is crash or is killed. If I intentionally exit it with code 0, I don't want it to restart. I've tried the below configuration. This does work on iOS 7, but do NOT work on iOS 8.
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<true/>
</dict>
Thus I tried adding another key StartInterval which's set as 10.
<key>StartInterval</key>
<integer>10</integer>
I tested this scenario by exit with code 0 and by kill my application with command kill -9 [PID]. This key makes my application to start again after 10 seconds after being killled. However, I have a concern about the result of this key while my application is running.
Does this key have an affect on the started and running application. I've monitored the log, seem StartInterval key do nothing with the running daemon. However, I'm quite not sure about it. Could you explain more information about it? Thank you very much.
According to this link http://pitaya.ch/documentation/iOS8_0APIDiffs.html all traces to launchd in the headers have disappeared. (search for /usr/include/launch.h, so you see it was removed)
Seems because the moved to new libxpc as base for launchd (see last slide in http://technologeeks.com/docs/launchd.pdf).
Seems like they changed launchd behaviour in iOS 8. Of Apple's own LaunchDaemons (located under /System/Library/LaunchDaemons/) some also have a KeepAlive-property in Dictionary format. If you kill them, they are respawned by launchd instantly.
But after some testing the only way to have KeepAlive-property working, is to add either add LaunchEvents (see slide 21ff in http://technologeeks.com/docs/launchd.pdf) and/or MachServices to the plist or to change the KeepAlive-property to:
<key>KeepAlive</key>
<true/>
But then there is NO way to kill your deamon without launchd respawning it, aside from executing launchctl unload /Library/LaunchDaemons/com.mycompany.testapp.plist.
My working plist:
<?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>Program</key>
<string>/path/to/your/daemon</string>
<key>RunAtLoad</key>
<true/>
<key>Label</key>
<string>com.mycompany.testapp</string>
<key>EnablePressuredExit</key>
<false/>
<key>UserName</key>
<string>root</string>
<key>JetsamProperties</key>
<dict>
<key>JetsamPriority</key>
<integer>-49</integer>
<key>JetsamMemoryLimit</key>
<integer>10000</integer>
</dict>
<key>POSIXSpawnType</key>
<string>Adaptive</string>
<key>Disabled</key>
<false/>
<key>ThrottleInterval</key>
<integer>5</integer>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
<key>Crashed</key>
<true/>
</dict>
<key>MachServices</key>
<dict>
<key> com.mycompany.testapp.someMachService</key>
<true/>
</dict>
<key>EnableTransactions</key>
<false/>
<key>LaunchEvents</key>
<dict>
<key>com.apple.notifyd.matching</key>
<dict>
<key>SignificantTimeChangeNotification</key>
<dict>
<key>Notification</key>
<string>SignificantTimeChangeNotification</string>
</dict>
<key>SomeMoreNotifications</key>
[...]
</dict>
</dict>
</dict>
</plist>
About the StartInterval-property: Even Apple has this property in addition to the KeepAlive-property for some important daemons (e.g. com.apple.locationd) and they seem running just fine. So I don't think you have to worry...
Use false with SuccessfulExit key.
SuccessfulExit
If true, the job will be restarted as long as the program exits and with an exit status of zero.
If false, the job will be restarted in the inverse condition. This key implies that "RunAtLoad"
is set to true, since the job needs to run at least once before we can get an exit status.
I have some problems.
I want use in my app next function:
int SBSLaunchApplicationWithIdentifier(CFStringRef displayIdentifier, Boolean suspended);
I add SpringboardServices.framework in my project
I add URL Schemes for my app
Created the file entitlement.xml with
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.springboard.launchapplications</key>
<true/>
</dict>
</plist>
Paste entitlement.xml in `Developer/Xcode/DerivedData/MyApp-efjwoxgwdyixnfassijmwtptxvlj/Build/Products/Debug-iphoneos/
Paste ldid in Developer/Xcode/DerivedData/MyApp-efjwoxgwdyixnfassijmwtptxvlj/Build/Products/Debug-iphoneos/
Did ./ldid -Sentitlement.xml MyApp.app/MyApp in console.
It's good working
But I saw some problem:
I did ./ldid -e MyApp.app/MyApp and saw next in console(double output entitlement.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "apple.com/DTDs/PropertyList-1.0.dtd">;
<plist version="1.0">
<dict>
<key>com.apple.springboard.launchapplications</key>
<true/>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "apple.com/DTDs/PropertyList-1.0.dtd">;
<plist version="1.0">
<dict>
<key>com.apple.springboard.launchapplications</key>
<true/>
</dict>
</plist>
I create MyApp.ipa file consist with:
ItunesArtwork
Payload
|---MyApp.app
|---Info.plist
I installed this ipa file on my jailbreak iPhone via iTools
MyApp is run but can't do some function. I try authorization via Internet and it's false. But when I installed app without added entitlement an didn't do some instruction with ldid, application working fine.
P.S: i didn't set in true Targets->AppName->Summary->Entitlements property (is it true or false ?)
Please help me