Post

Replies

Boosts

Views

Activity

Cloud icon for App Preview video uploaded to App Store Connect
The new iMovie doesn't seen to have an option "Share as App Preview", so I just exported it as a file and scaled to size 1080x1920 with avidemux (codec MPEG AVC, MP4v2 Muxer). Checking the format: codec H264, duration 29sec, 30fps — just as required for App Preview. Uploading to AppStoreConnect with Safari browser as App Preview for 5.5" iPhone, I get no complaints and even can see some frames while uploading. However, after the upload is complete, a cloud icon appears instead of the video. After I refresh the page, the cloud icon turns into exclamation mark(!). Also tried uploading 1920x1080 image for macOS — same result. Searched on the web — couldn't find any meaning of a cloud icon for App Preview video.
1
0
556
Nov ’20
Getting Developer support files for iOS 14.2
I installed a iOS 14.2 beta on my phone and have troubles accessing it from Xcode. Site https://github.com/filsv/iPhoneOSDeviceSupport does not host the files for iOS 14.2 When I duplicate iOS 14.0 to iOS 14.2, Xcode gives the message: "failed to prepare devices for developments", unpairing device causes Xcode to crash. I want to avoid installing a beta version of Xcode, as in the past I had troubles submitting my app to App Store with two Xcode's being installed. Please. upload iOS 14.2 support files to make them accessible without installing a beta Xcode version.
1
0
4.9k
Sep ’20
In-app Purchase-Restore regulations for non-consumable items
When in-app purchase is requested for an already purchased non-consumable item the StoreKit first asks to confirm a new purchase and only after that finds the purchase and offers the item for free. To avoid this confusion my applications first tried to restore the purchase and if not found prompted for a new purchase. This approach didn't get complaints neither from end users nor from the Apple review team ... until recently. When I submitted new releases of my apps, they were rejected by the review team who insisted that the app must have two buttons: one for Purchase, another for Restore. Both application are designed in a way that makes adding a button to startup page completely undesirable. To reach a consensus, I decided that 'Purchase' button instead of immediately starting the process, should bring up an additional dialog to select 'Purchase', 'Restore' or 'Cancel'. This effectively creates two separate buttons and splits a single purchase process into two separate processes. Guess what: the application was rejected again! I haven't got a chance to read the regulations (is there a way?), but have a strong feeling that the review team misunderstood them. To start with, I don't see a reason of having two separated buttons: it will be more logical to improve the StoreKit to avoid prompting for a purchase when it is already made. Secondly, I don't see why a separate dialog doesn't meet the regulations, given that it actually provides two separate buttons and splits the process. Hopefully this forum will clarify the issue.
0
0
357
Aug ’20
Remapping numeric keypad to work as arrows
I find convenient to use numeric keypad as arrows and never use it for entering digits. Until recently I used a third-party tool named Karabiner Elements, but since it stopped working with Big Sur, I am a looking for a way to achieve it without relying a third-party tool. Tried to remap Xcode (Preferences - Key Bindings - Selection), but it looks like Xcode doesn't differentiate between numeric keys on main keyboard and keypad, so after remapping it become impossible to enter a digit at all. There is an utility hidutls developed by Apple to remap the keys in the system, which will be ideal for me. I found an article on it https://developer.apple.com/library/archive/technotes/tn2450/_index.html which however isn't clear enough for me. Any help will will be highly regarded.
0
0
946
Jul ’20
SKStoreProductViewController: no way to close when App Store is unreachable
When App Store is out of reach, SKStoreProductViewController features 'RE-TRY', but no 'CLOSE' / 'CANCEL' button, or any other way to return to the app. The only available way to get out is brutally forcing the app to quit. As a matter of fact, quite often AppStore is unreachable from SKStoreProductViewController even if the corresponding page can be opened in Safari. Restarting the device re-establishes the access to the App Store.
0
0
405
Jul ’20
ios 14: profile downloaded, but no option to install
Try to download profile for iOS 14 from beta.apple.com. Get message: Profile downloaded. Review the profile in Settings.app if you want to install it. My devices are iPhone 6s and iPhone SE (probably 1st generation, not sure) that, according to release information, should run iOS 14. My Settings - General page (on both devices) doesn't give 'Profile & Device Management' option. When I go to Settings - General - Software Update, I get iOS 13.5.1 Your software up to date without a prompt to upgrade.
8
1
17k
Jul ’20
MacOS 10.15: GKMatchmaker doesn't find a match for a random peer.
The following code works well with MacOS 10.14 (Mojave) for a random peer, however doesn't work for an invited player (invitations don't arrive). With MacOS 10.15 (Catalina) it's vice versa: it works with invited players, however doesn't find a match for a random peer. In my case the 'random' peer is on iPhone running iOS 13. The MacOS and iOS apps are linked in the AppStore.Tried GKMatchmaker.shared() or local matchmaker. Tried recipients = nil and recepients = [] Whatever I do with Mac 10.15 behaves in same way: findMatch doesn't calls completion handler until I say gkMatchmaker.cancel(), after which the completion handler for findMatch is called with error -2.I've put breakpoints at the places marked /* BP */. OK means that the control gets there, Never - code is never reached.NetCommunicator and AgkPeerInvitationResponseProcessor are my own classes ('Agk' for Apple Game Kit) the meaning of which should be clear./* peer = nil. for a random peer */ func startMatchmaking(_ peer: GKPlayer?, _ responseProcessor: AgkPeerInvitationResponseProcessor?) { let request = GKMatchRequest(). /* BP. OK */ request.minPlayers = 2 // Including me request.maxPlayers = 2 // Including me request.defaultNumberOfPlayers = 2 if let peer = peer { request.recipients = [peer] } else { request.recipients = nil. // Tried also request.recipients = [] } request.recipientResponseHandler = { peer, response in /* BP Never */ guard let processor = responseProcessor else {return}. switch response { case .accepted: processor.agkInvitationAccepted(self, peer) break case .declined: processor.agkInvitationDeclined(self, peer) break default: let error = NetCommunicator.makeError(code: .PeerInvitationError, description: "\(response) (\(response.rawValue))") processor.agkInvitationError(self, peer, error) break; } } /* BP. OK */ let matchmaker = GKMatchmaker.shared(). // Tried also let matchmaker = GKMatchmaker(); self.matchmaker = matchmaker matchmaker.findMatch(for: request, withCompletionHandler: {match, error in /* BP: Only after GKMatchmaker.shared().cancel() or self.matchmaker.cancel() with error */ if let error = error { self.delegate?.sessionError(self, error) } else if let match = match { self.session = match match.delegate = self } }) }
0
0
389
Jan ’20