글.
만들면서 알게 된 것들을 적어 둡니다.
iOS와 소프트웨어, 그리고 덜어내는 일에 대한 기술 노트와 짧은 생각. 부산에서.
Skewers at Sutnom Kkochigui in Yeonsan-dong: tasty and good value
A skewer izakaya for a second round after makchang. I was full, so we ordered only the ten-skewer set. It tasted good and felt worth the price.

Jjaekjjaek Coffee in Gohyeon, Geoje: a warehouse-like room to rest in
After lunch in Geoje we went to a cafe in Gohyeon that my friend found. The 4,500 won americano was fine, and I liked the room. I spilled some coffee.

The special set at Jisimdo Hoetjip in Geoje: many dishes, but lacking
A friend and I went to Geoje on a whim and found a raw fish place that opens at 11. The set has raw fish, sushi, grilled fish, and fried food. It fell short.

Triploid oysters at Haerujil Gwangalli: big and tasty
A seafood place in Gwangalli I had wanted to try since around its opening. My first triploid oysters were big and tasty. The seafood was fresh.

Crab-marinade sashimi at Sarangppang in Namcheon-dong: worth one visit
A seafood place in Namcheon-dong I found on social media and booked ahead. You wrap raw fish with soy-marinated crab. The taste was fine, and it was crowded.

Animal Forest, an animal cafe in Gwangalli: even a pig and a chicken
An animal cafe in Gwangalli I visited with a friend over the Children's Day holiday. You buy a ticket, not food. We saw cats, dogs, a pig, and a chicken.

Yeonhwa-ri Haenyeochon in Gijang: a great 30,000 won seafood platter
On a family member's day off we ate by the window at Yeonhwa-ri Haenyeochon. The small seafood platter was a great deal at 30,000 won. No cards.

Yeonmakchang in Yeonsan-dong: pre-grilled makchang, clean taste
A place in Yeonsan-dong where a friend and I went for makchang after work. It came pre-grilled with hardly any smell. We added an order of spicy chicken feet.

Lee Jae-mo Pizza in Seomyeon: I am not sure it is worth the line
I saw the sign on an errand in Seomyeon and went in. I ate about two slices of the Lee Jae-mo Crust and took the rest home. Not bad, but worth a long line?

A glass of Yoichi at Acorn in Suyeong: a smooth end to the night
The third stop of the night, after Tansuho. I had a glass of Yoichi single malt, a Japanese whisky, and it was smooth. I chatted with the owner and went home.

Mango shaved ice at Cafe 824 in Gijang, on a terrace by the sea
A seaside cafe my family and I went to after seafood at Gijang Haenyeochon. We had the signature mango shaved ice for two on the terrace, facing the sea.

Corning in Gwangan-dong: gelato with a glass of white wine
A cafe in Gwangan-dong I stopped by on a fine Friday afternoon with a friend. It sells gelato and wine by the glass. I liked the stylish room.

Aged kimchi gimbap at Tansuho in Mangmi: good food, nice room
A second stop after Ijo Sutbul Galbi, at a Korean restaurant. I expected a long line, but we got in right away. The aged kimchi gimbap was good.

Ijo Sutbul Galbi in Mangmi Market: cheap pork belly grilled outdoors
At my companion's suggestion we grilled fresh pork belly at an outdoor table in Mangmi Jungang Market. 9,000 won for 130 g, and less smoke outdoors.

All-you-can-eat skewers and hot pot at Yangyang near PNU: fair value
A place near PNU that my friend found for malatang and lamb skewers. Skewers and hot pot, all you can eat, for 24,000 won per person. Better than I expected.

Joseph, a bar in Gwangalli: Macallan 12 at a candlelit bar seat
The third stop of the night, after Yasumu. It is the bar I end up at when I am in Gwangalli. I had Macallan 12 and my friend had a non-alcoholic cocktail.

Half-and-half platter at Izakaya Yasumu Gwangan: tasty, good value
A second stop after Durumi and a walk on the beach. We ordered the 37,000 won platter of raw beef and salmon sashimi. I was too full to eat much.

Pork belly and fried rice at Durumi Gwangan: worth standing in line
The first stop of the day with a friend. The staff explained and grilled the meat for us. We had Jeju pork belly and rib meat, then finished with fried rice.

Acorn, a whisky bar in Suyeong: easy even for a first-timer
A small whisky bar in Suyeong that an acquaintance recommended. I had an Old Fashioned and my friend had Bunnahabhain 12. The owner is kind and cheerful.

Pork belly at Baeksu Nongwon in Suyeong: a fair place for a quick stop
A close younger friend suggested it, and we had only pork belly at a barbecue place in Suyeong. The pork, 11,500 won for 130 g, and the service were fair.

The A set at Michin Makchang in Dongnae: not much smell, easy to eat
With a university friend after work, I tried a makchang place that looked new. We had the A set of salted and seasoned makchang and finished with pork skin.

Kalmat Hoetjip: grunt sold out, a pricier fish at no extra charge
A raw fish place near PNU I have used for almost 20 years. I asked for striped jack and grunt mixed, the grunt was sold out, and they swapped in a pricier fish.

Charcoal chicken with chives at Ondaljip in Dongnae: good with soju
I met a friend after work at our usual charcoal chicken place in Dongnae. We ordered the 14,000 won chive chicken as always and drank two bottles of soju.

Daebak Donkkaseu in Mandeok: big portions, prices not what they were
A Korean-style pork cutlet place I have known since its days in Mandeok Market. Generous portions, with dough soup on the side. Prices have risen.

The set at Ninano in Jeonpo: my friend picks the kimchi tuna gimbap
A second stop with friends after Paldak Paldak Hoetjip. We ordered the 47,000 won set: aged kimchi tuna gimbap, suyuk katsu, and corn cheese fire chicken.

Sashimi course at Jagalchi Hoetjip, Suyeong: go when the line is short
Back at a raw fish place in Suyeong after a long gap. The assorted sashimi course, 35,000 won a person, came with good fish and side dishes.

Assorted clams at Suminine in Cheongsapo: the staff grilled everything
After a trip to Gwangalli with my family, we went on to Cheongsapo for assorted clams. The staff grilled the scallops, clams, and shrimp for us.

Momos Coffee at Domoheon: crowded, but the garden is worth it
Coming down from Hwangnyeongsan, my family and I stopped at the Momos Coffee in Domoheon. Two iced coffees, a madeleine, and a cookie. It was crowded.

Sashimi at Makseoreo Hoetjip in Oncheonjang: better than expected
A raw fish place found by chance in an alley after Dakdukkeobi. I expected little, but the sashimi and side dishes were in good shape. Prices are average.

Chicken galbi at Dakdukkeobi in Oncheonjang: both kinds were good
A chicken galbi place a friend who works nearby introduced. We had two servings each of the salt and the gochujang kind. Easy on the wallet, and both were good.

Raw beef at Minjeong Hanu Suyuk Gukbap in Yeonsan-dong: fresh and fair
A second stop after Beolttejip, at a Korean beef soup place. The raw beef, 300 g for 20,000 won, was fresh, and the 9,000 won beef soup was good too.

Aged kimchi chicken stew at Chiaksan Matjip, Wonju: great kimchi
On the way home from Yongpyong to Busan, I stopped in Wonju and had the small aged kimchi chicken stew with a friend. The kimchi was especially good.

Seafood stew at Beolttejip in Yeonsan-dong: generous and fairly priced
Dinner with a friend at a seafood stew place near Yeonsan Station. The pot was full of seafood, and we had raw squid too. Good value for what we paid.

Joseph in Gwangalli: a happy night with Dongdong the dog
A bar in Gwangalli where a friend and I went at about 9 at night to see Dongdong, a dog who sometimes visits. The owner called the dog over for us.

Sashimi at Paldak Paldak Hoetjip in Jeonpo: fresh, thick slices
A raw fish place in Jeonpo-dong I often go to. The assorted sashimi was fresh, and the price and portion were fair. A grilled flounder comes with it.

Pork cartilage ribs and udon at Rentan in Suyeong: a fair second stop
A second stop after Jagalchi Hoetjip, at a briquette grill bar. The seasoned pork cartilage ribs had a smoky taste and were fine. I had udon too.

Udon at the Mandeok oden truck: cheap oden, an old street-stall feel
After two stops in Suyeong, I stopped at the oden truck in Mandeok. I asked for udon with oden and rice cake in one bowl. The oden and rice cake were cheap.

Seasonal seafood platter at Haesam Meongge Malmijal in Suyeong: fresh
A second stop after Shanghai Tan, at a seasonal seafood bar. The seasonal platter was fresh, and the sea urchin in the dish I added had no fishy taste.

Lamb skewers at Shanghai Tan in Suyeong: cheap and good, tricky fire
A lamb skewer place by Suyeong Station I have visited since it opened. Skewers, mala skewers, lamb ribs, and egg fried rice with a friend. Easy on the wallet.

Fresh pork makchang at Taeyoung in Dongnae: no off smell, nice chew
On a friend's day off we went to a makchang place in Dongnae. The fresh pork makchang had no off smell and a good chew, and the staff grilled all of it.

Sambari in Dongnae: good grilled octopus and shrimp, not cheap
I have been here many times. The staff grill the octopus over charcoal and clean the shrimp for you. It is not cheap, but I was happy with the food again.

Grilled chicken platter at Isegye in Seomyeon after an hour in line
A friend and I had the chicken platter and a grilled sticky rice ball in Seomyeon. The staff grill everything. The long wait is the one drawback.

Squid and cuttlefish were the best part at Eobuui Sulsang, Songjeong
Two of us ordered the scallop and red snow crab set and the squid and cuttlefish plate. Both squid dishes were good. The crab had less meat than I hoped.

RnT in Daegwallyeong, my burger stop: a single should be enough
A handmade burger shop I visit often in Daegwallyeong. I had my usual bacon burger set. The double is a big portion. A single would be enough for me.

Boiled turban shell at Ara Saengseongui, a good second stop
A second round with a friend who lives in Haeundae, at a grilled fish place in Jwadong Market. The boiled turban shell tasted good and the price felt fair.

Rough-cut raw fish at a fair price at the Gwangalli Eobang Festival
My first time at the Gwangalli Eobang Festival, with friends. We ate raw fish from a beach food stall. The price was moderate and the slices were rough.

Eochon Hoetjip in Suyeong: good sashimi, awkward upstairs seats
A first visit to a raw fish place inside Suyeong Paldo Market. The small 40,000 won platter was good for the price. The low attic-like room was not comfortable.

Moving Time Capsule backups to SMB on macOS 27
macOS 27 dropped the AFP client and ended Time Machine backups to a 4th-generation Time Capsule. How TimeCapsuleSMB restored them over SMB3, and the risks.
A Guinness on the terrace at Issi in Haeundae, facing the sea
After barbecue, a friend and I moved to Issi, across from Haeundae Beach, for Guinness. The terrace is a good spot to look at the sea and talk.

Striped jack sashimi at Dongnae Gimssi: good fish, slow to arrive
I went to an izakaya near Dongnae Station for striped jack. The 70,000 won sashimi was good fish, but it took long to arrive and came with little else.

All-you-can-eat clams at Jogaeview Gwangalli: great view, weak meal
Three of us had the all-you-can-eat clam table with extra scallops. The clams were fresh, but the refills and the heat mean I will not go back.

Thin-cut squid delivered from Uosin in Mandeok: plenty, but pricey
I ordered delivery from a nearby live squid restaurant. It was plenty for one and well cut, but spending over 50,000 won on one meal was a burden.

Dokdo Kkotsaeu in Dongnae: expensive, but very satisfying to eat
A second stop at a spot prawn specialist near Dongnae Station. The raw prawn, cleaned in front of you, was great. The portion was small for the price.

Butasinise in Haeundae: good pork, but I could do without the music
The Si set at a pork barbecue place in Haeundae: bone-in pork belly, neck, and skin. The meat was good and the staff were kind. The music was not to my taste.

Marinated galbi at Silla Nongwon in Deokcheon: the kids liked it more
After a hospital visit, my family ate at a galbi place near Deokcheon Station. The kids said it beat their usual spot. I liked the price and taste too.

Miso, an oden bar in Dongnae: an easy second stop when you are full
After filling up at the first place, we had a drink over oden and rice cake skewers. The staff are kind and the food is light, good for a second round.

Small rock bream at Singsing Domae Hoetjip in Dongnae: fresh and fair
A raw fish place in front of Dongnae Station I go to for sashimi at an easy price. I had the small rock bream for 65,000 won with a bottle of soju.

Dyeonbyeorak Makchang in Dongnae: clean-tasting and chewy
A friend and I had the plain and seasoned makchang set near Dongnae Station, then added fried rice. The makchang had no off smell, and the room was tidy.

Fresh assorted seafood at Yongwon Gadeok Hoetjip in Gupo Market
My mother and I had the small 40,000 won assorted seafood plate in Gupo Market. The seafood was fresh, and even the small size came with spoon worm.

The bottled cola at Starbucks Reserve: trying it once was enough
I bought the 4,700 won bottled cola at a Starbucks Reserve store because it comes with a bottle opener. Not bad, but the fizz was weak. Once was enough.

Bigfin reef squid at Amaika in Seomyeon: I ordered a second dish
An izakaya in Seomyeon I had seen on YouTube. The squid was so good that I added the konowata ika somen. I wanted more but stopped because of the cost.

Uri Pocha in Gwangalli: a plate of only what we wanted to eat
A second stop with a friend. I picked small squid and shrimp, my friend picked fresh tuna, and it came as one plate. It was fresh and the staff were kind.

LA galbi at Golmok Pocha in Gwangalli: still good after a long gap
I went back to a pub in Gwangan-dong that I used to visit often. The LA galbi, which the staff cut up at the table, tasted good again, and the service was kind.

Tanti in Jeonggwan: a fine view, but weak coffee and strict rules
A large bakery cafe in Jeonggwan with my family. The room, the view, and the parking were good. The one-drink rule, the cold brew, and the sweet bread were not.

Assorted sashimi at Seonpung in Gangneung: one I was happy with
With a couple who live in Daegwallyeong, I went to Gangneung for sashimi. We found the place on Naver Map. I liked the mix of fish and the side dishes.

Kalmat Hoetjip near PNU: twenty years of going back for the knife work
A raw fish place in Jangjeon-dong I have gone to for about 20 years. Premium sashimi for three and for two, plus a rockfish stew with a coupon.

Rules that make an App Store review submission safe to rerun
If the server accepts a review request but the response is lost, a rerun is rejected as a duplicate. How DailySudoku decides what a rerun should do.
Fixing the order of the UMP explainer and the ATT request on iOS
DailySudoku requested ATT from the app, while Google UMP could also request it after an explainer. How I found the ATT calls in the SDK and reordered them.
Keeping the export compliance answer in sync across two files and ASC
The encryption export answer lives in Info.plist, a submission declaration file, and App Store Connect. Fixing a false success and a blocking regression.
When parallel tests disturbed each other through global notifications
An ad banner test that passed locally in 0.02 seconds hit a 45-minute limit in CI. The cause was a global notification from another test, fixed by injection.
How a canceled Task still ran to the end in a review prompt
A review prompt scheduled 2 seconds after a win could still run after the screen was left. A cancel after Task.sleep returns does not come back as an error.
Turning Apple Pencil handwriting into Sudoku digits
Placing a handwritten digit in DailySudoku: splitting strokes into taps and ink, grouping them, building model input, and applying only trusted results.
Exposing 81 Sudoku cells to VoiceOver and TalkBack
The DailySudoku board is one view on screen, but assistive technology needs 81 cells. How iOS and Android expose each cell, and what is still unverified.
A contract for counting ad impressions the same way on three platforms
A finished load on iOS, an impression callback on Android, a DOM mount on the web: one name, three meanings. A contract that splits the stages of an ad.
Daily puzzle scores: which day they belong to and how they get lost
In a game started at 23:50 and finished at 00:05, the puzzle date, the submission time, and the leaderboard window can disagree. How far to guarantee delivery.
Why a daily puzzle ID needs a generator version
A daily board is made from the date. If the generator changes, one date can give two boards, and a date-only ID cannot tell them apart. Design and proposal.
Ordering ad providers by GeoIP region without the location permission
When ad providers differ by region, an app needs a broad region, not coordinates. Consent first, then a server-side region bucket decides the provider order.
Keeping and revoking a one-time remove-ads purchase on iOS and Android
A remove-ads purchase looks final, but reinstalls, pending payments, and refunds make the purchase result alone unreliable. Read current entitlements instead.
Verifying a verification script with deliberately broken input
A check script that exits with status 0 has not necessarily checked the rule. Break one thing in a copy of a good sample and confirm the expected category.
Who watches the watcher: finding a scheduled job that vanished
A deleted scheduled job leaves no error. Compare the expected roles with what the scheduler really holds, and alert on the time of the last success.
Rust shared core, part 7: splitting tests and CI by layer
Passing Rust tests still leaves iOS linking, Android release ABIs, and Wasm loading in web builds to break. Test the domain in Rust and build fresh in CI.
Rust shared core, part 6: using it on the web as a Wasm package
To use the Rust rules from mobile on the web, compile them to WebAssembly and ship a package. Roles, where to initialize in Next.js, and the call contract.
Rust shared core, part 5: what to check when shipping a .so on Android
Generating Kotlin bindings does not finish Android integration. Per-ABI .so placement, wiring Rust into Gradle, the 16 KB page rule, and release checks.
Rust shared core, part 4: delivering it to iOS as an XCFramework
Passing Rust tests does not mean an iOS app links. Bundle device and simulator static libraries into an XCFramework, ship it as a Swift package, and align CI.
Xcode UI tests and what automationmodetool does and does not cover
When Xcode UI tests stall at an authentication prompt on an unattended Mac, automationmodetool covers one part and TCC permissions another. Here is how to tell.
Rust shared core, part 3: keep UniFFI generated code behind an adapter
UniFFI generates Swift and Kotlin calling code from Rust. What to expose and how far generated types spread is up to the app. An adapter keeps them contained.
DevToolsSecurity on macOS and debugger authorization on unattended CI
Attaching a debugger on a Mac can show a password prompt, and unattended CI stalls on it. What DevToolsSecurity changes, read directly on macOS 27.0.1.
Why Hangul file names fall apart into jamo, and how NFC fixes it
A Hangul file name made on macOS can look decomposed or count as a different name elsewhere. The cause is the Unicode normalization form, checked with code.
Rust shared core, part 2: keep the API across the boundary coarse
Types that suit a Rust engine differ from types that are easy to use from Swift, Kotlin, and TypeScript. Expose coarse action-level functions under a contract.
Rust shared core, part 1: what to share and where to draw the line
Building for iOS, Android, and the web means writing the same rules three times. Narrow what Rust shares to rules that must give the same result, in 3 layers.
What to decide when registering fonts at runtime on iOS
Bundled fonts need only an Info.plist entry, but downloaded or packaged fonts may suit runtime registration. This covers names, a registry, and file lifetime.
What to look at before adopting a Swift package registry
Receiving Swift dependencies by registry ID changes the path they travel. Request order, configuration, mixed graphs, mirrors, authentication, and signing.
Five changes from WWDC26 for iOS developers
What Apple announced at WWDC26 for iOS developers: App Intents, where models run, Xcode 27, the screen, and subscriptions. Facts and my view are kept apart.
이 사이트는 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.