Hey @sesingh,
What version of the Command Line Tools are you using with Xcode?
Are you modifying your IPA file after archiving in any capacity? What are you export options set as? The Xcode verbose logs contain tons of errors that have not been resolved over the years so the Bitcode errors could be legit or misleading.
What is the exit code of altool when you get the error? You can get it by running the below command.
echo $?
Hopefully we can find a clue to correct the issue.
Happy coding!
Post
Replies
Boosts
Views
Activity
Hey @rextremotabaresDT,
Thanks for posting on the forums!
I am running the iOS 16 Beta on my iPhone 13 and I have been able to successfully install Enterprise signed applications. Are you running into an error that you would be able to share on the forums? Do you have any device console logs that help pinpoint where the error is happening during the installation process?
When attempting to install an Enterprise application, does the device already have an approved Enterprise certificate or is this the first Enterprise application you are attempting to install and the certificate is not approved?
Hopefully this helps and happy coding!
Hey @trebla4603,
Thanks for posting on the developer forums!
I personally have never heard of Apple waiving annual the Apple Developer Account fee since the account is fundamental to providing you with the services and support you will need to deploy your potential application, but if you are unable to raise these funds internally, it might be worth using one of the crowd funding platforms and seeing if others will rally behind your new idea and could be an encouraging experience!
Best of luck and happy coding!
Hey @Ashcheulov,
Would it be possible for you to share additional information on where you are getting this error or how it is being reported?
The error above that you have posted is a very small subset of information that the App Store Connect API returns when you get a 401 from the server so having the additional details would be especially helpful.
However, without having this information, I would look in the below places.
Most of the time, the response headers from Apple will have a clue as to why your request was rejected. You could have exceeded the number of requests for the API key, you could be passing malformed data, etc. I would make sure to look through these as a starting place just to see what exists to help you in your efforts.
Is it possible that you are making a request that the API Key does not have permission for? Without knowing what API you are hitting and the exact response it is hard to tell, but if you are hitting the same API endpoint over and over and you get this randomly, it is possible the token expired prior to the remote server getting the request and reading the response error body should give you a clue on next steps.
It could be possible that the authorization header is missing all together. It is not likely if you are running a sequence of API requests and all of a sudden this stops working, but if you can run the commands verbose and view the API trace data this would be an area you could at least rule out.
Hopefully this helps you get started looking. My initial thought is that the token is expiring during the series of transactions possibly due to the overall number of screenshots you are uploading, but that is a guess without much factual information.
Happy coding!
Hey @taktem,
No problem at all! We are all here to learn!
So I tried to validate what you have posted above using all of the documented implementation information that Apple provides, and I am not able to replicate your findings. Specifically, if I include /v1/apps as the scope of my JWT, I am not able to successfully interact with the API. However, when I remove the '/v1' portion from the request, I am capable of hitting the API successfully.
When trying to replicate your environment, would it be possible for you to share your full JWT composure code so that we can see what it looks like? Would be interesting to see if you are seeing something that Apple is not expecting so that the paths do not align.
One other thing that might be of interest that I could help validate is the different API Key permissions. What API Key type are you using?
Specifically for wildcards, I would strongly recommend opening up a Feedback with Apple for this so that they can evaluate it and determine whether or not this fits within their current authentication model. I know that they are moving away from wildcards in many other places within the Apple ecosystem so it would be great to file a Feedback and get information from Apple directly on the direction they are going since wildcards can act as a very broad attack vector if the token were to fall into the wrong hands.
Hopefully this helps some and happy coding!
Hey @rethgil2,
Thanks for posting on the Apple Developer Forums!
Without additional information, it is going to be hard for the forum to help you diagnose the issue that you are currently facing.
While you may not have crash logs, are you able to connect your iOS device to a macOS device, open the Console application and then replicate the issue after starting the log capture? You should be able to search for Errors and Faults at a minimum to give us a clue of what is going on as to why the application is failing.
If you have not used the Console before, I would suggest finding the process(s) associated with your application and then doing a right click and "Show Process" to limit the number of logs you need to look through. This may also help give you context as to what your application is doing prior to crashing.
Hopefully this helps and happy coding!
Hello @Zivi0,
Thanks for posting your question on the Apple Developer Forums!
Would it be possible for you to share your applications App Store URL? This will help other forum users attempt to load your application page and verify if it is still available for sale.
You can find this in App Store Connect -> Apps -> Select App -> App Information -> Additional Information -> View on App Store.
One thing to note about the App Store is that the SEO process is always changing and at least for the applications that I have deployed, for the first few days, the fastest way to find an application is by searching for the developer and looking at the latest release or by using the link to the App Store directly. My assumption is that this is because it takes a while for the SEO algorithm to update but I am not sure what the real cause is.
Hopefully this helps and happy coding!
Hey @Mike-in-NM,
Thanks so much for the additional information!
Since Expo is in the middle of your development efforts and getting to Apple, I would suggest also posting in the Expo forums if you have not already just to get help from those who specialize in using Expo.
How are you trying to upload the application to TestFlight? If you have access to the IPA file and are attempting to upload through Transporter, you will be able to use the below commands in order to find the Info.plist file.
unzip /Path/To/IPA.ipa
The Info.plist will be in the /Payload/*.app/Info.plist location.
Hopefully this helps and happy coding!
Hey @ir0nDev,
Thanks for posting on the developer forums!
Have you attempted to generate your JWT outside of your NodeJS application and make a GET request with a tool like Postman or from cURL on your local machine? If you are getting an authentication error, that is where I would start to verify that the token is being properly generated and that you can make a request without NodeJS which is acting as an abstraction layer right now for you to find out what is really going on.
The error message that you have posted above (body Unauthenticated) is from NodeJS and not the actual App Store Connect API body response so being able to see that will be valuable while troubleshooting.
Is it possible for you to share a link to the JWT Library (https://jwt.io/libraries) that you are using? Personally, when I need to generate tokens I do not need to include 'typ': 'JWT' in my header and I have no problems interacting with the App Store Connect API (If I include it my requests also work).
Thanks in advance for any additional information that you can share!
Hopefully this helps and happy coding!
Hey @taktem,
Thanks so much for posting on the Apple Developer Forums!
I had never worked on this before now so I was tinkering around and I think I found what could be holding you up (or at least what held me up).
The first issue that I ran into when trying to figure this out was that the App Store Connect API documentation appears to need some updating. I have filed a feedback for this (FB10036380). You will need to update your "scope" to the below code example.
“scope”: [
“GET /builds/{id}/app”
]
Currently, including the /v1 as a part of the scope path will return an error from the App Store Connect API which does not match their documentation. By removing the /v1 things started to work for me.
There are many ways to accomplish what to put in the scope path, and I have not fully tested if the API accepts wildcards, but in this specific example, you would need to have some information beforehand or you would need to dynamically generate tokens on the fly and return them to the system wanting to make a request. A bit past the scope (no pun intended) of this response but I will give you one example.
In order to limit the scope of the Read the App Information of a Build API, you would first need to know all of the Build IDs and include those in the array of the scope permissions. To do this, you would need a JWT without a scope limitation to hit the List Builds API and then find the IDs from the response and generate a new JWT to be exchanged for a token.
Below is an example of what this would end up looking like (IDs are fake and generated by uuidgen).
“scope”: [
“GET /builds/4E01297D-1D43-4020-B21C-9DC94A40579B/app”,
“GET /builds/A72021D3-8712-445D-9585-B847BBCCA362/app”,
“GET /builds/65E73521-ED9A-4F06-9C5D-44B54BB34ED6/app”,
“GET /builds/1FAC0D8D-4FD5-4ECD-9B84-D1422ADE3003/app”
]
There are many ways to go about achieving what you are looking to do so I would explore how to implement this logic upstream as a part of an initial request, but that is just how I like to build things.
Hopefully this helps and happy coding!
Hey @Mike-in-NM,
Thanks for posting this question on the developer forums!
One way to confirm which iOS SDK your application is actually being compiled with is by checking out theInfo.plist from the compiled binary and checking what is being injected. The Info.plist would be found at the below path.
/Path/To/Archive/Archive.xcarchive/Products/Applications/*.app/Info.plist
You would want to check what the value of DTSDKName is set to. If this is not iOS 15.5 like expected, then the file is not being compiled with the iOS 15 SDK.
If this is the case, one thing to check would be your Command Line Settings under Xcode --> Preferences --> Locations --> Command Line Tools and make sure the latest version of Xcode Command Line Tools are selected.
Hopefully this helps and happy coding! Let us know what you find out!
Hello @svedm,
Thanks for posting on the Apple Developer Forums!
Have you already requested this entitlement the developer account that you are signed into when trying to access the page?
Have you tried to load the page in a private browser (i.e. private mode on Safari)? I have found that Chrome specifically and other browsers have issues with XSS tokens and this causes issues sometimes when a page is protected by authentication so I would try it in a private browser window and see if you get different results.
Hopefully this helps and happy coding!
Hey @rlecheta,
I have run into this issue before and the way that I solved it was by leveraging the below command within my automation scripts. This is an implementation of what @eskimo suggested with a different flavor.
security set-key-partition-list -v -S apple-tool:,apple: -s -k [Login Keychain Password] [Login Keychain Path]
I did not figure this out on my own and had the help of many previous developers with the power of the internet. Additional reading and learning can be found at the below URLs.
https://apple.stackexchange.com/questions/255872/unable-to-unlock-login-keychain-on-sierra-in-ssh
https://stackoverflow.com/questions/24023639/xcode-command-usr-bin-codesign-failed-with-exit-code-1-errsecinternalcomponen
https://mostlikelee.com/blog-1/2017/9/16/scripting-the-macos-keychain-partition-ids
I would also suggest like @eskimo did that you use key based authentication for your remote SSH connection and leverage additional logic for protecting either your login keychain or using a separate less important keychain all together.
Hopefully this helps and happy coding!
Hey @Xia Jian,
Thanks for posting on the Apple Developer Forums!
I believe the reason that you are experiencing the behavior in which you are is that by default, applications should support iOS, iPadOS, and possibly macOS next week after WWDC. This is driven by the App Store Review Guidelines and iPhone applications running in compatibility mode.
https://developer.apple.com/app-store/review/guidelines/#hardware-compatibility
2.4.1 To ensure people get the most out of your app, iPhone apps should run on iPad whenever possible. We encourage you to consider building universal apps so customers can use them on all of their devices. Learn more about Universal apps.
However, if your application is leveraging a device capability that is only available on iPhone (i.e., HealthKit) then an iPad will not be able to technically install your application, meaning that it will not show up in the App Store for iPads as an install option.
https://developer.apple.com/support/required-device-capabilities/
This does not guarantee that iPads will not be able to install your application in the future though, so I would suggest spending the time to design your application to support iPad. We know the long term goal of Apple is to make it easy for consumers to use our products on all of the Apple products they own so designing with this in mind will set you up for success.
Hopefully this helps and happy coding!
Hey @joestone,
Thanks for posting on the developer forums!
I am not sure if you are still encountering this error, but I did some looking, and in your posting it looks like the example string and the string in your example code are not the same exact string. I am pasting them below for reference.
ตัวแก้ไข xliff, การแปลเป็นภาษาท้องถิ่น, เครื่องมือ xliff, xcode, การแปล xliff, xcloc, การแปลงข้อความ
ตัวแก้ไข xliff, การแปลเป็นภาษาท้องถิ่น, เครื่องมือ xliff, xcode, การแปล xliff, xcloc, การแปลงข้อความ xliff
Your first string is 100 characters exactly. However, your second string that is in the API request body is 106 characters which is too long. I am able to replicate the API error when using the string that is too long, but when I use the string that is only 100 characters I am able to successfully update the Keywords text using the API. I tested using both an English and a Thai localization to make sure there was not an issue with how the characters themselves were being handled in the API body.
One thing to note that I take advantage of with Keywords in particular is that you do not need to include spaces after the commas as the string is broken apart by the comma and not a comma and a space (the space is wasted and still counts as a character). I would minify your strings to look like below.
ตัวแก้ไข xliff, การแปลเป็นภาษาท้องถิ่น, เครื่องมือ xliff, xcode, การแปล xliff, xcloc, การแปลงข้อความ <- 94 Characters
ตัวแก้ไข xliff, การแปลเป็นภาษาท้องถิ่น, เครื่องมือ xliff, xcode, การแปล xliff, xcloc, การแปลงข้อความ xliff <- 100 Characters
Both of the above strings are accepted by the API and accomplish what you are trying to do I believe.
Hopefully this helps and happy coding!