Pencil Research
Archive About
  • WWDC 2024 Postscript

    Everything but the content

    WWDC 2024 was a lucky one for us – 100% of our team (that is, both of us) got tickets.

    Here are some logistics notes we made for ourselves.

    Travel schedule

    We like to arrive a bit early to get our bearings and catch up (we’re a remote company), but it would have been better to stay an extra day at the end of the trip. We could have taken advantage of more consultation opportunities with Apple if we had.

    What to pack

    No matter how many devices we buy (and pack), it never seems to be enough…

    We each brought our dev laptop, main phone (iPhone 15 Pro), beta phone (iPhone 13-ish), and main iPad (iPad Pro 11” M4). As soon as the beta OS went live, we put them on the iPads and beta phones - but we quickly realized some features for this particular beta season only work on the 15 Pro, so I doubled down and put the beta on my primary phone too. Thus continues my streak of failing to maintain a non-beta phone over the summer, unbroken since iOS 13.

    So far we haven’t put the beta of macOS Sequoia on any devices - we’ll probably avoid it unless the beta version of Xcode requires it later on.

    Even though visionOS 2 was announced, we didn’t regreat leaving our Vision Pros (Visions Pro?) at home – we wouldn’t have had time to dive into visionOS 2 on top of everything else anyway. I love Apple’s Vision Pro case, but it takes up about 40% of my carryon, and it was nice to leave it behind.

    A lot of our time was spent outside in the sun. I went to most events with a tote containing my iPad (protected by its Magic Keyboard), some water, sunscreen, and sunglasses.

    Lodging

    This was our fourth time since June 2023 visiting Apple Park, and we’ve stayed in downtown San Jose every time. Being able to walk to drinks and dinner, while still being just 20 minutes away by Uber from everything else, helped us unwind after the information overload. Proximity to retro game stores like Gameshop Downstairs is a nice bonus.

    Swag

    Some of the other indie devs we met really have their swag dialed in. Squircle app icon enamel pins and stickers seem to be the go-to – the pins especially fit nicely with the pins Apple gives out. Hopefully we can get our act together and participate in the pin and sticker trading in 2025.

    Apple also passed out totes and water bottles, which helped me out of a bind since I forgot to pack both.

    Community event highlights

    Attending Core Coffees, iOSDevHappyHourIRL, and RevenueCat Barcade gave us the chance to socialize with other devs regardless of whether they got tickets or not. Core Coffee really feels like the backbone of WWDC. No matter where you are in the WWDC calendar, there’s always a Core Coffee just a few hours (and kilometres) away.

    Apple events

    Apple’s hospitality was unmatched by any corporate event I’ve ever attended. Make sure you bring (and wear) sunscreen, drink lots of water, and take shade when you need it.

    Summer of betas

    Now it’s time to start counting seeds and to build something cool with all the tech announced at WWDC 2024. See you in 2025 🤞

    → 6:56 PM, Jun 15
  • Acquiring an app: Transfer gotchas

    Pencil Research has acquired Petey, an AI assistant for your Apple Watch, iPhone, and iPad. Petey’s creator, Hidde van der Ploeg, is well known for his high-quality apps, and Petey reflects this. As the acquirer, we wanted to respect the work Hidde put into his app – and also the well-deserved trust in Hidde by the app’s users – by making the transfer process seamless.

    With the transfer behind us now, we can share what we’ve learned. The process was painless, but still surprising – some parts that we expected to be difficult were very easy, and some things we took for granted turned out to be impossible.

    The services Petey uses that matter for the purposes of transferring it are:

    1. 🛫 TestFlight, for its beta program and tester management
    2. 🔐 Keychain sharing, for sharing a user’s private information and subscription status across the user’s devices
    3. 📱📲 App Groups, to facilitate information sharing between its different targets (iOS/iPadOS, watchOS, iOS widgets, watchOS widgets)
    4. ☁️ iCloud, specifically iCloud key-value storage and CloudKit
    5. 💁‍♂️ Its own backend, for facilitating communication between end user devices and third-party APIs

    Preparing the app for transfer

    Apple’s approach to app transfers protects users’ privacy while minimizing the bureaucracy imposed on the app developers. Their full documentation covers many corner cases - definitely worth reading in its entirety before attempting this yourself.

    🛫TestFlight: Starting over

    Petey had a successful beta program, but TestFlight groups and users are not transferable. To make Petey eligible for transfer, all TestFlight testers and groups needed to be deleted. Testers added by email can always be re-added, of course, but testers who joined the beta program via anonymous link are lost.

    🔐Keychain sharing: Minor for us, maybe worse for you

    Transferred apps like Petey lose their existing keychain access groups when the buyer releases their first update. Petey handles this without a hiccup, but it’s easy to imagine an app that stores critical information in keychain – this would require a coordinated migration of user data between the seller and buyer, starting before the transfer is initiated. See DTS’s comments in the developer forum thread ITMS-90076: Potential Loss of Keychain Access.

    Post-transfer

    With Petey transferred into our account, we needed to release a minor update to make sure we had everything we needed to update the app. Attempting to build the app showed a few issues in each target in the ‘Signing and Capabilities’ tab.

    📱📲 Moving over missing bundle and app group IDs

    First, we changed the Team for each target from the seller’s team to our team. This revealed that, with the exception of the bundle ID for the iOS/iPadOS target, all the required identifiers for the app were not available for us to use. Xcode reported this as:

    Failed to register bundle identifier. The app identifier (some bundle ID) cannot be registered to your development team because it is not available. Change your bundle identifier to a unique string to try again.

    The cause of this is that the app transfer process only transferred the bundle ID for the iOS/iPadOS target to our account, leaving the bundle IDs for the other targets behind. It also left the app group ID in the seller’s account.

    The fix was simple enough: the seller deleted the bundle IDs and the App Group ID from their developer account, and we registered them in ours.

    ☁️ Tweaking the iCloud KV storage entitlement

    Attempting a build then revealed another issue, which Xcode reported as:

    Provisioning profile “iOS Team Provisioning Profile: (some bundle ID) doesn’t match the entitlements file’s value for the com.apple.developer.ubiquity-kvstore-identifier entitlement.

    This is caused by iCloud KVS using, by default, a dynamic value for one of the app’s entitlements.

    The fix was to edit the app’s .entitlements file. Find the com.apple.developer.ubiquity-kvstore-identifier key, and change the value from:

    $(TeamIdentifierPrefix)$(CFBundleIdentifier)

    to:

    SellerTeamID.com.company.app

    Hardcoding the seller’s team ID here will resolve the error. (If you’re using Xcode to edit your .entitlements file, the key will be shown as “iCloud Key-Value Store”.)

    💁‍♂️ Moving the backend

    Petey’s backend carries a lot of the app’s value, since the app’s functionality is largely dependent on the third-party API access intermediated by the backend. By coordinating carefully on transferring first the domain, and then the services, we were able to avoid downtime.

    To transfer the domain without downtime, the buyer needs to add DNS records as soon as they’re able – ideally, before the domain transfer is finished. Here’s what we did:

    1. Seller gives buyer the complete DNS records for the domain
    2. Seller unlocks the domain
    3. Seller requests an authorization code (< 24 hours)
    4. Buyer uses authorization code to initiate the domain transfer
    5. Buyer adds the DNS records from step 1 to the buyer’s registrar’s DNS settings as soon as possible (even if you want to eventually use a real DNS service)
    6. Wait. (The seller’s registrar will likely enforce a one- to five-day delay on the transfer.)

    When transferring a domain in, most registrars will either preserve the seller’s nameserver records for the domain, or set the domain to use the registrar’s own nameserver. Our registrar (Hover) preserved the seller’s nameservers (Squarespace), and Squarespace kept answering DNS requests for the domain even after transferring it out. That gave us time to manually switch the nameservers to our own. The domain’s records were available throughout the process.

    With the domain safely moved, it was time to move the services. For Petey, that meant transferring some Vercel projects and GitHub repositories. Rather than inviting the seller to our existing team, which involved some security and billing complexity, the seller transferred the projects to one of our admins who then transferred it to the team.

    Welcome, Petey!

    We acquired Petey because we believe in Hidde’s app design philosophy, the app’s quality, the taste of its users, and the future potential of apps that make AI tools accessible to everyday users. We’re excited to get to work.

    → 1:34 PM, Jun 3
  • Hello

    Pencil Research is the company that owns Penbook, Petey, and some other apps. We started the company in 2011. We mostly build our apps, but we acquire apps too. Pencil Research’s core team is Slaven Radic and Ben Fox.

    → 7:39 PM, Jun 1
  • RSS
  • JSON Feed
  • Surprise me!