Post

Replies

Boosts

Views

Activity

Can't create new app version on App Store Connect
It's not possible to create a new version for any App Store Connect app. To reproduce, I navigate to my app and click the (+) button to create a new version number. I type in a version number, and click "Create." It fails with an error, "An error has occurred. Try again later." When I view it in the Network tab of the Web Inspector, it shows that there's a 500 error. { "errors": [{ "status": "500", "code": "UNEXPECTED_ERROR", "title": "An unexpected error occurred.", "detail": "An unexpected error occurred on the server side. If this issue continues, contact us at https://developer.apple.com/contact/." }] } The same error occurs when I attempt to create an app store version using the App Store Connect API.
185
119
29k
Feb ’24
Privacy Manifests: Incorrect "Missing API Declaration" error
I received an email from Apple saying my app is using the following privacy-restricted APIs without an API declaration. NSPrivacyAccessedAPICategoryUserDefaults NSPrivacyAccessedAPICategoryFileTimestamp NSPrivacyAccessedAPICategorySystemBootTime It's true, my app is using those features, in multiple pods that I depend on. For example, my app depends on the FBAudienceNetwork cocoapod, and I've upgraded it to version 6.15.0, which added a privacy manifest specifically to ensure that Apple wouldn't flag my app with an error. https://developers.facebook.com/docs/audience-network/setting-up/platform-setup/ios/changelog/ I can see its privacy manifest explicitly covers these APIs, below: <?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>NSPrivacyTrackingDomains</key> <array> <string>ep1.facebook.com</string> <string>ep6.facebook.com</string> </array> <key>NSPrivacyCollectedDataTypes</key> <array> <dict> <key>NSPrivacyCollectedDataType</key> <string>NSPrivacyCollectedDataTypeAdvertisingData</string> <key>NSPrivacyCollectedDataTypeLinked</key> <true/> <key>NSPrivacyCollectedDataTypeTracking</key> <true/> <key>NSPrivacyCollectedDataTypePurposes</key> <array> <string>NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising</string> <string>NSPrivacyCollectedDataTypePurposeAnalytics</string> </array> </dict> <dict> <key>NSPrivacyCollectedDataType</key> <string>NSPrivacyCollectedDataTypeDeviceID</string> <key>NSPrivacyCollectedDataTypeLinked</key> <true/> <key>NSPrivacyCollectedDataTypeTracking</key> <true/> <key>NSPrivacyCollectedDataTypePurposes</key> <array> <string>NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising</string> </array> </dict> </array> <key>NSPrivacyAccessedAPITypes</key> <array> <dict> <key>NSPrivacyAccessedAPIType</key> <string>NSPrivacyAccessedAPICategoryUserDefaults</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <string>CA92.1</string> </array> </dict> <dict> <key>NSPrivacyAccessedAPIType</key> <string>NSPrivacyAccessedAPICategorySystemBootTime</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <string>35F9.1</string> </array> </dict> <dict> <key>NSPrivacyAccessedAPIType</key> <string>NSPrivacyAccessedAPICategoryFileTimestamp</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <string>C617.1</string> </array> </dict> </array> <key>NSPrivacyTracking</key> <true/> </dict> </plist> So, why is Apple flagging my app with "Missing API Declaration" errors? The API declaration is right there. What am I still missing?
1
0
749
Apr ’24
Using Apple Push Notifications Console with Safari Web Push?
I'm using standard Safari Web Push, but my notifications aren't coming through. I'm trying to debug this. Is it possible to use the Apple Push Notifications Console to debug/analyze Safari Web Push deliverability? I can't figure out how to use it for web push. When I login and try to use the Push Notification Console, it asks me to choose an "app." But for standard Safari 16+ Web Push, there is no "app," no "Website Push ID", etc. that I register with Apple. So how can I use the Push Notification Console for this? Apple's documentation does strongly imply that it should work. Sending web push notifications in web apps and browsers: To resolve an error, address the issue and resend your push notification request. For more information about the factors that impact the delivery of a push notification, see Viewing the status of push notifications using Metrics and APNs. And that page is all about the Push Notification Console. So it must be possible somehow, right?
0
0
627
Jan ’24
Unable to upload Game Center Achievement Image using API
I attempted to use the new App Store Connect API 3.0 feature to manage Game Center achievements. My goal was to create a bunch of achievements, with one en-US localization each, with an attached image. Creating the achievement and its localization initially seems to have worked fine; I uploaded the image, and its assetDeliveryState.state is COMPLETED. But when I visit the achievement in the App Store Connect Console UI, all the images I've uploaded are 404 Not Found. I'm going to have to upload all of these images by hand. 😭 Here's the sample code I used, using the https://github.com/dfabulich/node-app-store-connect-api v5.0.3. import { api } from 'node-app-store-connect-api'; import { readFile, stat } from 'node:fs/promises'; import { homedir } from 'node:os'; const appId = 6468677114; const vendorIdentifier = 'com.example.myachievement'; const showBeforeEarend = true; const points = 10; const locale = "en-US"; const title = "My Achievement"; const afterEarnedDescription = "Earned the achievment."; const beforeEarnedDescription = "Earn the achievement."; const fileName = `${vendorIdentifier}.png`; const params = { issuerId: "69a6de6f-0d6d-47e3-e053-5b8c7c11a4d1", apiKey: "3S3G8T48YW", }; params.privateKey = await readFile(`${homedir()}/.appstoreconnect/private_keys/AuthKey_${params.apiKey}.p8`, 'utf8'); const { read, create, uploadAsset, pollForUploadSuccess } = await api(params); const {data: gameCenterDetail} = await read(`apps/${appId}/gameCenterDetail`); console.log('creating', vendorIdentifier); const gameCenterAchievement = await create({ type: 'gameCenterAchievements', attributes: { referenceName: title, vendorIdentifier, points, repeatable: false, showBeforeEarned, }, relationships: { gameCenterDetail } }); console.log(' localization'); const gameCenterAchievementLocalization = await create({ type: 'gameCenterAchievementLocalizations', attributes: { locale, name: title, afterEarnedDescription, beforeEarnedDescription, }, relationships: { gameCenterAchievement } }); console.log(' image'); const image = await create({ type: 'gameCenterAchievementImages', attributes: { fileName, fileSize: (await stat(fileName)).size, }, relationships: { gameCenterAchievementLocalization } }); console.log(' upload'); await uploadAsset(image, await readFile(fileName)); console.log(' poll'); await pollForUploadSuccess(image.links.self);
6
0
1.1k
Nov ’23
Bug: Can't file Feedback reports in Feedback Assistant
I'm unable to file bug reports in Feedback Assistant. To reproduce: Navigate to https://feedbackassistant.apple.com/ (I'm logged in) Click the Create button in the header, taking you to https://feedbackassistant.apple.com/new-form-response Click any category button Expected: A form to fill out Actual: A blank white screen; no way to fill out the form I've tested this in Safari 17.1 and Chrome 119 on macOS Sonoma 14.1 I see an error in when I open Safari Web Inspector: Failed to load resource: the server responded with a status of 404 (Not Found) https://appleseed.apple.com/sp/en-US/feedback/forms/3027
2
0
659
Nov ’23
Bug: App Store Connect API no longer returns startDate on appPrices objects
The documentation on the site says, https://developer.apple.com/documentation/appstoreconnectapi/list_all_prices_for_an_app "The current price has a null start date. Each additional price has a start date that indicates the date when the price will take effect around the world." The WWDC documentation provides an example of this. https://developer.apple.com/videos/play/wwdc2020/10004/?time=431 This used to work, but the AppPrice object no longer includes a start date. All mention of the AppPrice startDate attribute (or even that it has attributes) seems to have been scrubbed from the public documentation. https://developer.apple.com/documentation/appstoreconnectapi/appprice I filed this as FB11548644 in September, with no reply. Can anyone think of a workaround?
0
0
643
Jan ’23
Can't file a TSI for App Store Connect API; DTS won't investigate
I filed a bug in Feedback Assistant for this issue https://developer.apple.com/forums/thread/711307 (FB10941060). Apple didn't reply, so I attempted to file a Technical Support Incident to have an engineer at Apple investigate the issue. (Follow up 805401346) DTS replied saying that they refuse to investigate any issues in App Store Connect, including the App Store Connect API. This is not OK! When there are critical problems with the App Store Connect API, there has to be some support channel I can use to get an Apple engineer's attention. What can I do here? Thank you for contacting Apple Developer Technical Support (DTS). We provide support for code-level questions on hardware & software development, and are unable to help you with your question. For questions regarding App Store Connect, we recommend that you first check the App Store Connect Help: https://help.apple.com/app-store-connect/ If you are not able to find the information you need in the App Store Connect Help and you are still not able to resolve your issue, please direct your inquiry through the Contact Us page: https://developer.apple.com/contact/ Submitting an inquiry through the Contact Us page will expedite the response time from the proper Apple representative. When contacting the App Store Connect Team, be sure to mention that you were referred by DTS.
2
0
1.7k
Aug ’22
Bug: IAP pricing API returns inconsistent results
The App Store Connect API returns inconsistent results for IAP pricing. https://api.appstoreconnect.apple.com/v1/inAppPurchasePriceSchedules/:iapId/manualPrices?include=inAppPurchasePricePoint&filter[territory]=USA I expect to see at least two inAppPurchasePrices objects, one with startDate: null, representing the current, active price, and at least one with a non-null startDate. Many IAPs I query don't include an inAppPurchasePrices object that has startDate: null, forcing me to sort through the return objects for the latest startDate (excluding those in the future). Other IAPs I query return only one inAppPurchasePrices object, and that object has startDate: null. Worst of all, sometimes the startDate: null object points to the wrong price point! To repro Run this Node program I wrote using https://www.npmjs.com/package/node-app-store-connect-api const { fetchJson } = await api({ issuerId: "***", apiKey: "***" }); const iaps = await fetchJson('apps/1302297731/inAppPurchasesV2?limit=200'); const output = { noLatest: [], noNull: [], nullMismatchesLatest: [], ok: [], } await Promise.all(iaps.map(async (iap) => { const { data: inAppPurchasePrices, included } = await fetchJson(`inAppPurchasePriceSchedules/${iap.id}/manualPrices?include=inAppPurchasePricePoint&filter[territory]=USA`, { inclusions: 'tree' }); const latestStartPrice = inAppPurchasePrices.filter(price => price.attributes.startDate && new Date(price.attributes.startDate).getTime() < Date.now()) .sort((a, b) => b.attributes.startDate.localeCompare(a.attributes.startDate))[0]; const nullStartPrice = inAppPurchasePrices.filter(price => !price.attributes.startDate)[0]; if (!latestStartPrice) { output.noLatest.push(iap.id); } if (!nullStartPrice) { output.noNull.push(iap.id); } if (latestStartPrice && nullStartPrice) { const latestStartPricePoint = included.inAppPurchasePricePoints[latestStartPrice.relationships.inAppPurchasePricePoint.data.id]; const nullStartPricePoint = included.inAppPurchasePricePoints[nullStartPrice.relationships.inAppPurchasePricePoint.data.id]; if (latestStartPricePoint !== nullStartPricePoint) { output.nullMismatchesLatest.push(iap.id); } else { output.ok.push(iap.id); } } })); console.log(JSON.stringify(output, null, 2)); Expected All IAPs should appear in the ok array, having a startDate: null price that matches the current latest price with a non-null startDate. Actual { "noLatest": [ "1497954161", "1441701978", "1435841888", "1456629092", "1381567394", "1478155596", "1420181684", "1546010700", "1307073664", "1435842259", "1447528634", "1456628326", "1355941688", "1355943062", "1389691983", "1364108501", "1614866807", "1412920025", "1412927608", "1377458307", "1635603476", "1614867647", "1402141384", "1355943058", "1522960459", "1438261088", "1355943066", "1473496366", "1435186057", "1364106150", "1443695443", "1473495651", "1624284308", "1412923459", "1532797948", "1467986798", "1364102273", "1480297027", "1391358524", "1606438471", "1497951341", "1364106702", "1332191975", "1480298417", "1454531393", "1634234785", "1496622145", "1355942300", "1607908448", "1412924898", "1452845547", "1412922765", "1614901335", "1412928940", "1601726945", "1579373942", "1635602874", "1496621119", "1402775284", "1555535989", "1481266301", "1402141505", "1467986077", "1526194764", "1584208741", "1364106824", "1522959003", "1364107650", "1450343495", "1419335516", "1473494688", "1361358209", "1440133234", "1449545225", "1529667540", "1635603182", "1412928190", "1355943775", "1441701155", "1514835714", "1634325161", "1412923835" ], "noNull": [ "1402141378", "1402141617", "1402141630", "1402141433", "1402141611", "1402141281", "1402141605", "1402141608", "1402141440", "1402141273", "1402141370", "1402141442", "1402141439", "1402141437", "1402141276", "1402141389", "1402141504", "1402141502", "1402141501", "1402141607", "1402141615", "1402141613", "1402141435", "1402141619", "1402141510", "1402141429", "1402141494", "1402141279", "1402141622", "1402141623", "1402141375", "1402141610", "1402141606", "1402142202", "1402141508", "1402141609", "1402141424", "1402141503", "1402141441", "1402141509", "1402141280", "1402141430", "1402141496", "1402141616", "1402141292", "1402141295", "1402141275", "1402141612", "1402141298", "1402141385", "1402141282", "1402141272", "1402141602", "1402141423", "1402141625", "1402141629", "1402141271", "1402141387", "1402141601", "1402141386", "1402141428", "1402141421", "1402141495", "1402141294", "1402141438", "1402140691", "1402141390", "1402142201", "1402141627", "1402141620", "1402141614", "1402141604", "1402141434", "1402141296", "1402141383", "1402141278", "1402141626", "1402141621" ], "nullMismatchesLatest": [ "1559613404", "1480951433", "1593896143", "1624290126", "1402141388", "1497950653", "1611780428", "1478784036", "1575588963", "1607162006", "1611045747", "1575589112", "1569461289", "1619138153", "1583793186", "1601722583", "1539790918", "1487867489", "1402141618", "1506977067", "1588425188", "1632448119", "1619138571", "1497954915", "1611045866", "1593060899", "1601719729", "1482341662", "1512806464", "1532073035", "1530425266", "1617098896", "1611046073", "1633118569", "1497959781", "1412920918", "1624064036", "1497951222", "1617100668", "1578378729", "1536619711", "1569460808", "1632483553", "1478782797", "1482341459", "1543962463", "1606792538", "1402141426", "1588968070", "1493021281", "1564178247", "1624276610", "1562385331", "1585716972", "1517480296", "1402141422", "1482781115" ], "ok": [ "1402141274", "1391871240", "1402141293", "1364108521", "1469870296", "1461673391", "1443694803", "1402141425", "1481265446", "1402141443", "1412917867", "1384042585", "1562888619", "1412920920", "1402141507", "1402141506", "1402141452", "1364107061", "1447036664", "1364107609" ] }
1
0
883
Jul ’22
IAP Manual Prices are indistinguishable by default, because they don't mention their territory unless you explicitly include it
I'm filing this as a bug, with three sections, "To Repro", "Actual" and "Expected" To Repro Using the App Store Connect API, you can load the price schedule for an IAP, like this: https://api.appstoreconnect.apple.com/v1/inAppPurchasePriceSchedules/:iapId/manualPrices Actual: Indistinguishable Prices The API at least one inAppPurchasePrices object per territory, but doesn't mention any relationships to the territory or the price point. For the current price, where the startDate is null, it's showing a bunch of indistinguishable "price" objects that include no pricing information, and no visible link to any pricing information. In other words, the API returns 175 of these meaningless blobs, which are only distinguished by their IDs, with no visible price or territory information: { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJUVE8ifQ", "attributes": { "startDate": null }, "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePrices/eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJUVE8ifQ" } }, { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJCSUgifQ", "attributes": { "startDate": null }, "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePrices/eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJCSUgifQ" } }, { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJNU1IifQ", "attributes": { "startDate": null }, "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePrices/eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJNU1IifQ" } } Workaround: include price points and territories You can workaround this by adding include=inAppPurchasePricePoint,territory to the request. https://api.appstoreconnect.apple.com/v1/inAppPurchasePriceSchedules/:iapId/manualPrices?include=inAppPurchasePricePoint,territory When you do that, each inAppPurchasePrices object will have a relationships section, like this: { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJaV0UifQ", "attributes": { "startDate": null }, "relationships": { "inAppPurchasePricePoint": { "data": { "type": "inAppPurchasePricePoints", "id": "MTM5MzU0MTgzMV96d181NTA" } }, "territory": { "data": { "type": "territories", "id": "ZWE" } } }, "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePrices/eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJaV0UifQ" } }, { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJNS0QifQ", "attributes": { "startDate": null }, "relationships": { "inAppPurchasePricePoint": { "data": { "type": "inAppPurchasePricePoints", "id": "MTM5MzU0MTgzMV9ta181NTA" } }, "territory": { "data": { "type": "territories", "id": "MKD" } } }, "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePrices/eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJNS0QifQ" } }, { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJGU00ifQ", "attributes": { "startDate": null }, "relationships": { "inAppPurchasePricePoint": { "data": { "type": "inAppPurchasePricePoints", "id": "MTM5MzU0MTgzMV9mbV81NTA" } }, "territory": { "data": { "type": "territories", "id": "FSM" } } }, But when you do that, the territories and price points will also appear in the response, in the included section. (That's what include= normally does in the App Store Connect API.) Expected: The relationships links should be present even without explicitly including them Normally, in the App Store Connect API, important relationships are linked even without explicitly adding includes. For example, if you make a request like this: https://api.appstoreconnect.apple.com/v1/apps/:appId/inAppPurchasesV2 You'll see that the corresponding data objects each have a bunch of declared relationships, for inAppPurchaseLocalizations, pricePoints, content, etc. The relationship links are there, even though I didn't explicitly include any of them, so they don't clutter up the included array. Each inAppPurchasePrices data object should mention its territory and its price point, even without explicitly including it (i.e. the relationships links should be there, but the included array should not). Ideally, when I do this query: https://api.appstoreconnect.apple.com/v1/inAppPurchasePriceSchedules/:iapId/manualPrices The response should look like this: { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJaV0UifQ", "attributes": { "startDate": null }, "relationships": { "inAppPurchasePricePoint": { "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePricePoints/MTM5MzU0MTgzMV96d181NTA" } }, "territory": { "links:" { "self": "https://api.appstoreconnect.apple.com/v1/territories/ZWE" } } }, "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePrices/eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJaV0UifQ" } }, { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJNS0QifQ", "attributes": { "startDate": null }, "relationships": { "inAppPurchasePricePoint": { "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePricePoints/MTM5MzU0MTgzMV9ta181NTA" } }, "territory": { "links:" { "self": "https://api.appstoreconnect.apple.com/v1/territories/MKD" } } "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePrices/eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJNS0QifQ" } }, { "type": "inAppPurchasePrices", "id": "eyJpIjoiMTM5MzU0MTgzMSIsImQiOjAsImMiOiJGU00ifQ", "attributes": { "startDate": null }, "relationships": { "inAppPurchasePricePoint": { "links": { "self": "https://api.appstoreconnect.apple.com/v1/inAppPurchasePricePoints/MTM5MzU0MTgzMV9mbV81NTA" } }, "territory": { "links:" { "self": "https://api.appstoreconnect.apple.com/v1/territories/FSM" } } } },
0
2
1.1k
Jul ’22
When you request inAppPurchasesV2?include=iapPriceSchedule, no useful information is included
When you do this query: https://api.appstoreconnect.apple.com/v1/apps/:appId/inAppPurchasesV2?include=iapPriceSchedule It adds inAppPurchasePriceSchedules objects to the response. But those objects contain no data at all; they just contain relationships links to the manualPrices objects. As a result, there's no way to include the current price tier in the request for IAPs. You have to make N requests for N manualPrices objects to get N actual price schedules (with actual prices). The prices endpoint for apps allow you to include=priceTier to see the price tiers. IAPs should do something similar.
0
0
691
Jul ’22
"Meet Xcode Cloud" session missing?
I think there's a problem with https://developer.apple.com/wwdc21/sessions/ It lists two Xcode Cloud sessions, "Explore Xcode Cloud workflows" and "Customize your advanced Xcode Cloud workflows" whose descriptions say: "we recommend first watching “Meet Xcode Cloud” from WWDC21." But I see no session titled "Meet Xcode Cloud" anywhere on the session list. This indicates to me that the session is missing somehow. (I wonder if other sessions are missing, too. The "multiple product pages" A/B testing feature for App Store Connect suggests to me that there'd be a "What's new in App Store Connect" session this year, but I don't see one.)
1
0
703
Jun ’21
Is it possible to test Apple Silicon builds on Intel Macs?
I'm a small-time app developer; I'm not likely to get access to the Developer Transition Kit. Despite that, I'd like to be able to test my macOS app on my existing Intel Mac, to make sure my apps will continue to work on Apple Silicon. Is it possible to do a test my Apple Silicon compatibility today on my Intel Mac? (I'm imagining something like running macOS Big Sur in a VM. It might perform slowly, but at least it would give me peace of mind to know that my app will work.)
3
0
3.7k
Jun ’20
Integrating with Quick Website Search
I'm looking for information on how to integrate with Safari Quick Website Search as a web developer. I see how I can turn off websites in Quick Website Search (Preferences -> Search) but I believe users are not able to add them manually; Safari is meant to automagically detect them. Under what circumstances will my website show up as an option for Quick Website Search? How can I test this? On my own Mac, can I manually add sites to Quick Website Search by editing configuration files? Which configuration file would I look at to do this?
1
0
660
Jun ’20
Why doesn't apps.apple.com offer a way to push an app to my device?
On a Mac or Windows machine, when I visit a an app details page on apps.apple.com like https://apps.apple.com/us/app/gorogoa/id1269225754 it has a banner at the top, "This app is available only on the App Store for iPhone and iPad." I wish there were a button on this page that I could use to login and send the link directly to my iPhone. I know it's possible to use Handoff to send the link to a phone, but most users don't know how to do that. (Swipe slowly up from the bottom of the screen to enable the app switcher, tap the Handoff bar at the bottom.) Instead, users who want to download an iOS app are typically searching for it again by name on the App Store, or emailing themselves the link and opening the link on their phone, which adds friction to the download process. (I'm guessing this might not be the right place to raise this question. But what IS the right place? If I were at WWDC in person I could ask around in the hallways…)
0
0
432
Jun ’20