Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testflight - iOS27 でのAppleIntelligenceの強化

Testflight - iOS27 でのAppleIntelligenceの強化

札幌iPhoneアプリ開発懇談会2026年6月22勉強会のプレゼンテーション資料

Avatar for notoroid

notoroid

June 22, 2026

More Decks by notoroid

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ w J1IPOFΞϓϦ։ൃऀ 9!OPUPSPJE  w ΞϓϦ։ൃऀྺ ʙ  w

    ΞϓϦ࡞࢛ͬͯ൒ੈل 8JOEPXTΞϓϦʙJ04  w झຯ͸ήʔϜ ൓ࣹਆܦ͕ਰ͑ͱ໨ͷർΕ͕ൈ͚ͳ͍  w ࠷ۙ༡ΜͩήʔϜ w 4QMBUPPO4QMBUPPO৽࡞͕ग़Δ·Ͱ଴ͪ
  2. import AppIntentsTesting import XCTest /// AppIntentsTesting Λ༻͍ͨ AppSchemaʢphoto υϝΠϯʣͷ֤ Intent

    ςετɻ final class AppIntentsSchemaTests: XCTestCase { /// `.system.search` εΩʔϚͷݕࡧ Intent ͕࣮ߦͰ͖Δ͜ͱΛ֬ೝ͢Δɻ func testSearchIntentRuns() async throws { let definitions = IntentDefinitions(bundleIdentifier: "com.irimasu.PixAsort") let searchAlbumArtIntentDefinition = definitions.intents["SearchAlbumArtIntent"] let searchAlbumArtIntentIntent = searchAlbumArtIntentDefinition.makeIntent(criteria: "δϟζ") let result = try await searchAlbumArtIntentIntent.run() // valueͷ಺༰Ͱ൑அ _ = result.value } /// `.photos.openAsset` εΩʔϚͷ Intent ͰΞηοτΛ։͚Δ͜ͱΛ֬ೝ͢Δɻ func testOpenAssetIntentRuns() async throws { let definitions = IntentDefinitions(bundleIdentifier: "com.irimasu.PixAsort") let entityDefinition = definitions.entities["AlbumArtEntity"] let suggestedEntities = try await entityDefinition.suggestedEntities() let target = suggestedEntities.first let intent = definitions.intents["OpenAlbumArtIntent"].makeIntent(target: target) let result = try await intent.run() // valueͷ಺༰Ͱ൑அ _ = result.value } } "QQ*OUFOUT5FTUUJOHͷྫࣸਅΞϓϦ
  3. import AppIntentsTesting import XCTest /// AppIntentsTesting Λ༻͍ͨ AppSchemaʢphoto υϝΠϯʣͷ֤ Intent

    ςετɻ final class AppIntentsSchemaTests: XCTestCase { /// `.system.search` εΩʔϚͷݕࡧ Intent ͕࣮ߦͰ͖Δ͜ͱΛ֬ೝ͢Δɻ func testSearchIntentRuns() async throws { let definitions = IntentDefinitions(bundleIdentifier: "com.irimasu.PixAsort") let searchAlbumArtIntentDefinition = definitions.intents["SearchAlbumArtIntent"] let searchAlbumArtIntentIntent = searchAlbumArtIntentDefinition.makeIntent(criteria: "δϟζ") let result = try await searchAlbumArtIntentIntent.run() // valueͷ಺༰Ͱ൑அ _ = result.value } /// `.photos.openAsset` εΩʔϚͷ Intent ͰΞηοτΛ։͚Δ͜ͱΛ֬ೝ͢Δɻ func testOpenAssetIntentRuns() async throws { let definitions = IntentDefinitions(bundleIdentifier: "com.irimasu.PixAsort") let entityDefinition = definitions.entities["AlbumArtEntity"] let suggestedEntities = try await entityDefinition.suggestedEntities() let target = suggestedEntities.first let intent = definitions.intents["OpenAlbumArtIntent"].makeIntent(target: target) let result = try await intent.run() // valueͷ಺༰Ͱ൑அ _ = result.value } } "QQ*OUFOUT5FTUUJOHͷྫࣸਅΞϓϦ ΞϓϦͷόϯυϧ໊Λࢦఆ ΠϯςϯτΛࢦఆ ύϥϝʔλʔΛࢦఆ 5FTU޲͚ͷ൑ఆϝιουΛݺͼग़͠Մೳ ྫ9$5"TTFSU&RVBM
  4. 6OJU6*5FTUͱ"QQ*OUFOUTͷςετ؀ڥ ϓϩηε಺͔ϓϩηε֎͔ 6OJU5FTU6*5FTU ΞϓϦͷϓϩηε ςετ޲͚ʹΞϓϦͷϥϯν MBVODI ςετ޲͚ʹΞϓϦͷऴྃ ςετ 4FUVQ 5FBSEPXO

    4FUVQ 5FBSEPXO 4FUVQ 5FBSEPXO ςετ ςετO ΞϓϦͷQVCMJDͳػೳ ςετ޲͚ͷΞϓϦʹ͸5FUT༻ͷίʔυؚ͕·Ε͓ͯΓɺ 4FUVQ5FTU5FBSEPXOͷλΠϛϯάͰQVCMJDػೳʹΞΫηεՄೳ
  5. 6OJU6*5FTUͱ"QQ*OUFOUTͷςετ؀ڥ ϓϩηε಺͔ϓϩηε֎͔ 6*5FTUͷ"QQ*OUFOUT5FTUJOH ΞϓϦͷϓϩηε ςετϓϩηεͷऴྃ ςετ 4FUVQ 5FBSEPXO 4FUVQ 5FBSEPXO

    4FUVQ 5FBSEPXO ςετ ςετO "QQ*OUFOUT5FTUJOH͸ɺΞϓϦͷϓϩηε্Ͱಈ࡞͠ͳ͍ɺ ΞϓϦʹొ࿥͞Ε͍ͯΔػೳ *OUFOU ͷݺͼग़݁͠ՌΛಘΔ͚ͩɻ ςετͷϓϩηε 04ͷςετϑϨ ʔϜ Β͖͠΋ͷ
  6. 9DPEFCFUBͰͷ໰୊ %FWJDF)VC J1IPOFγϛϡϨʔλʔͰಈ࡞ͤͣ w %FWJDF)VC J1IPOFγϛϡϨʔλʔ Ͱ͸ಈ࡞ͤͣ w "QQ*OUFOUTͷݕূΛEFQMPZલͷςετʹ͸૊ΈࠐΊͳ͍ w

    ςετίʔυΛ"*ʹ·͔ͤΔͱैདྷͷ6*ςετΛॻ͍ͯ͠·͏ w ͦͷ··࣮ߦͤ͞ΔͱେྔͷJ1IPOFγϛϡϨʔλʔ͕ىಈ
  7. ࢀߟ OPUPSPJE4QFBLFS%FDL w "QQ4DIFNBʹΑΔΠϯςϦδΣϯ τͳ4JSJମݧͷߏங w IUUQTEFWFMPQFSBQQMFDPN KQWJEFPTQMBZXXED w "QQ*OUFOUϑϨʔϜϫʔΫͷ৽ػೳ

    w IUUQTEFWFMPQFSBQQMFDPN KQWJEFPTQMBZXXED w "QQ*OUFOUT5FTUJOHʹΑΔ"QQ *OUFOUͷར༻ঢ়گͷݕূ w IUUQTEFWFMPQFSBQQMFDPN KQWJEFPTQMBZXXED w *OUFHSBUJOHZPVSDBMFOEBSBQQ XJUI"QQMF*OUFMMJHFODFc"QQMF %FWFMPQFS%PDVNFOUBUJPO w IUUQTEFWFMPQFSBQQMFDPN EPDVNFOUBUJPO"QQ*OUFOUT JOUFHSBUJOHZPVSDBMFOEBSBQQ XJUIBQQMFJOUFMMJHFODF