Ang Action Extension ay isang iOS extension na nagsasagawa ng mga custom na aksyon sa content mula sa ibang mga app nang hindi lumilipat ng konteksto. Hindi tulad ng Share Extension na nagpapadala ng data sa ibang app, ang Action Extension ay nagbabago ng content mismo sa lugar: nagsasalin ng teksto, nagbabago ng mga filter ng larawan, sumusuri ng baybay, o gumagawa ng PDF. Ayon sa Apple (2024), ang Action Extension ay ang pangalawang pinakasikat na uri ng extension pagkatapos ng Share Extension, na ginagamit sa 42% ng mga app sa kategoryang “Produktibidad”. Ang agarang aksyon nang hindi inilulunsad ang pangunahing app — pangunahing bentahe para sa gumagamit.
Mga Pangunahing Punto
Action Extension — ay isang uri ng iOS app extension na nagpapahintulot sa iyo na magsagawa ng aksyon sa content nang direkta sa konteksto ng host app. Pumili ang gumagamit ng teksto sa Safari, pindutin ang “Mga Aksyon” at pumili halimbawa “Suriin ang Baybay” — pinoproseso ng extension ang teksto at ibinabalik ang resulta nang hindi umaalis sa browser. Natatanggap ng extension ang data ng input sa pamamagitan ng NSExtensionContext at maaaring ibalik ang binagong content.
Ang Action Extension ay lumitaw sa iOS 8 bilang bahagi ng arkitektura ng mga extension ng app. Ang pangunahing tampok nito ay ang extension ay walang sariling interface (opsyonal) at tumatakbo sa konteksto ng host app. Hindi iniiwan ng gumagamit ang kasalukuyang screen, na tinitiyak ang minimal na cognitive disruption. Ayon sa Apple, ang Action Extension ay ang tanging uri ng extension na maaaring sabay na magbasa at magbago ng content ng host app (sa pamamagitan ng NSExtensionContext na may pagbabalik ng resulta).
Ang Action Extension ay ginagamit sa iba't ibang sitwasyon: pagsasalin ng teksto sa browser, paggawa ng PDF mula sa web page, paglalapat ng filter sa larawan sa gallery, pagsuri ng baybay sa anumang field ng teksto, pagpapaikli ng URL, pag-encrypt ng teksto, at pagdagdag sa bookmark. Ang kakayahang magamit ng Action Extension ay ginagawa itong popular na tool para sa mga app sa kategoryang “Mga Kagamitan” at “Produktibidad”.
Ang Action Extension at Share Extension ay madalas na napagkakamalan, ngunit ang kanilang layunin ay pangunahing naiiba. Ang Share Extension ay nagpapadala ng content mula sa host app patungo sa iyong app; ang Action Extension ay nagpoproseso ng content at ibinabalik ito. Ang pagkakaiba ay nakakaapekto sa arkitektura, karanasan ng gumagamit, at mga kinakailangan sa pagsasaayos ng Info.plist.
| Katangian | Action Extension | Share Extension |
|---|---|---|
| Layunin | Pagbabago ng content | Pagpapadala ng content sa app |
| Interface | Opsyonal (custom) | SLComposeServiceViewController |
| Pagbabalik ng data | Oo, sa pamamagitan ng completeRequest | Hindi |
| Konteksto | Nananatili sa host app | Lumipat sa extension |
| Posisyon sa menu | Action Sheet (itaas na bahagi) | Share Sheet (ibaba na bahagi) |
| Karaniwang aksyon | Pagsasalin, pagwawasto, filter | Pag-save, pag-publish |
Ang Action Extension ay lilitaw sa menu ng mga aksyon (Action Sheet) kapag pinindot ang button na “Ibahagi” o “...”. Awtomatikong inilalagay ng iOS ang Action Extensions sa itaas na bahagi ng sheet (mga aksyon), at ang Share Extensions sa ibabang bahagi (mga app). Sitwasyon ng gumagamit: pumili ng teksto → pinindot ang “Mga Aksyon” → pinili ang iyong Action Extension → nakatanggap ng naprosesong resulta nang hindi lumilipat ng app.
Ang Action Extension ay binubuo ng target sa Xcode, UIViewController para sa pagpapakita ng interface (opsyonal), NSExtensionContext para sa input-output ng data, at pagsasaayos ng Info.plist. Ang arkitektura ay mas simple kaysa sa Share Extension: walang sapilitang compose interface, at ang extension ay maaaring gumana nang buong-buo nang walang UI.
Target — hiwalay na bundle na may identifier na minana mula sa pangunahing app. UIViewController — opsyonal na interface para sa pagpapakita ng progreso, mga setting, o resulta. NSExtensionContext — lalagyan na may data ng input (inputItems) at pamamaraang completeRequest para sa pagbabalik ng resulta. Info.plist — pagsasaayos ng activation sa pamamagitan ng NSExtensionActivationRule at mga attribute (NSExtensionAttributes) para sa pagtukoy ng mga suportadong uri ng content.
Ang Action Extension ay tumatanggap ng data ng input sa pamamagitan ng extensionContext?.inputItems — array ng NSExtensionItem. Ang bawat elemento ay naglalaman ng mga attachment na may data at UTI. Pagkatapos ng pagproseso, tinatawag ng extension ang completeRequest(returningItems:) na may array ng output na NSExtensionItem. Ang host app ay tumatanggap ng naprosesong data at ipinapakita ang mga ito. Asynchronous na modelo: ang extension ay maaaring magsagawa ng mahabang operasyon, na pinapanatili ang konteksto hanggang 30 segundo.
Tingnan natin ang paglikha ng Action Extension sa Swift para sa pagsasalin ng napiling teksto. Ang extension ay tumatanggap ng teksto mula sa host app, ipapadala ito sa server ng pagsasalin, at ibinabalik ang resulta. ActionViewController — pangunahing controller na ginagawa ng Xcode kapag nagdaragdag ng target.
import UIKit
import MobileCoreServices
class ActionViewController: UIViewController {
@IBOutlet var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
extractTextAndTranslate()
}
func extractTextAndTranslate() {
guard let item = extensionContext?.inputItems.first
as? NSExtensionItem
else { return }
for attachment in item.attachments ?? [] {
attachment.loadItem(
forTypeIdentifier: kUTTypePlainText as String
) { [weak self] (text, error) in
guard let inputText = text as? String else { return }
TranslationService().translate(inputText, from: "en", to: "ru") {
translated in
DispatchQueue.main.async {
self?.resultLabel?.text = translated
}
}
}
}
}
}
Pagkatapos ng pagproseso, ibinabalik ng extension ang resulta sa host app. completeRequest na may data ng output — alternatibong sitwasyon kapag ang extension ay hindi nagpapakita ng UI ngunit direktang ibinabalik ang naprosesong content.
// Pagbabalik ng naprosesong teksto sa host app
let resultItem = NSExtensionItem()
let resultData = translated.data(using: .utf8)!
let attachment = NSItemProvider(
item: resultData,
typeIdentifier: kUTTypePlainText as String
)
resultItem.attachments = [attachment]
extensionContext?.completeRequest(
returningItems: [resultItem], completionHandler: nil
)
Ang Action Extension ay maaaring gumana sa dalawang mode: may UI at walang UI. Sa mode na walang UI, ginagawa ng extension ang aksyon nang buo sa background at tinatawag ang completeRequest kaagad pagkatapos ng pagproseso. Sa mode na may UI, nagpapakita ang extension ng controller, kinukumpirma ng gumagamit ang aksyon, at pagkatapos lamang nito ipapadala ng completeRequest ang resulta. Ang pagpili ng mode ay depende sa pagiging kumplikado ng aksyon at pangangailangan ng input ng gumagamit.
Ang pamamaraang loadItem(forTypeIdentifier:) ay gumagana nang asynchronous — ang data ay maaaring malaki (mga larawan, video). Ang NSItemProvider ay namamahala ng streaming loading at caching. Para sa mga larawan gamitin ang kUTTypeImage, para sa mga file — kUTTypeFileURL. Mahalaga: ang loadItem ay maaaring tawagin sa background thread — i-update ang UI lamang sa pamamagitan ng DispatchQueue.main.
Ibinabalik ng Action Extension ang naprosesong data sa pamamagitan ng completeRequest na may array ng NSExtensionItem. Ang bawat elemento ay tumutugma sa uri ng data ng output. Ang host app ay maaaring palitan ang orihinal na content ng naprosesong content — halimbawa, palitan ang orihinal na larawan ng na-filter. NSExtensionItem ay sumusuporta sa parehong UTI tulad ng sa input, kasama ang mga karagdagang (halimbawa, public.html para sa web content).
Ang Action Extension ay ginagamit sa dose-dosenang sitwasyon — mula sa mga simpleng kagamitan hanggang sa kumplikadong proseso ng negosyo. Mga klasikong halimbawa ay sumasaklaw sa mga operasyong text, graphical, at file, pati na rin ang pagsasama sa web content.
Action Extension para sa teksto: pagsasalin, pagsuri ng baybay, pagbilang ng karakter, pagbabago ng laki ng titik, pag-encrypt, paggawa ng QR code mula sa teksto. Pumili ang gumagamit ng teksto sa anumang app na may field ng teksto (Safari, Notes, Mail) at sa isang click ay ginagawa ang aksyon. Ang pag-highlight ng syntax ng code, pag-format ng Markdown, at pagpapaikli ng URL — mga sikat na halimbawa ng Action Extension para sa mga advanced na gumagamit.
Para sa mga larawan, ang Action Extension ay nag-aalok: paglalapat ng mga filter, pag-crop, pagbabago ng laki, conversion ng format (HEIC sa JPEG), pagdagdag ng watermark, pagkilala ng teksto (OCR), at compression. Ang pagproseso ng mga larawan ay dapat mabilis — inaasahan ng gumagamit ang resulta sa loob ng 2–3 segundo. Para sa mabibigat na operasyon, gamitin ang Core Image sa GPU o mga background queue.
Action Extension para sa URL: paggawa ng PDF mula sa web page, pag-save sa Pocket/Pinterest, pagsuri ng bilis ng site, pag-archive ng page, pagkuha ng metadata ng Open Graph, paggawa ng screenshot ng page. Ang pagbuo ng PDF — isa sa pinakasikat na sitwasyon: ginagawang PDF ng gumagamit ang web page nang hindi nagbubukas ng mga serbisyo ng third-party.
Mga Madalas Itanong
Ang Share Extension ay nagpapadala ng content mula sa host app patungo sa iyong app. Ang Action Extension ay nagpoproseso ng content sa lugar at ibinabalik ang resulta. Share — pagpapadala, Action — pagbabago. Ito ang pangunahing pagkakaiba na tumutukoy sa arkitektura at UX.
Oo. Kung ang aksyon ay hindi nangangailangan ng input mula sa gumagamit (halimbawa, pagbilang ng karakter), ang extension ay maaaring gawin ito sa background at agad na ibalik ang resulta sa pamamagitan ng completeRequest. Sa Info.plist dapat tukuyin ang NSExtensionActivationSupportsWebURL o ibang UTI na tumutugma sa uri ng data.
Sa lahat ng app na sumusuporta sa UIActivityViewController o mga karaniwang controller ng aksyon. Kabilang dito ang Safari, Mga Larawan, Mga File, Notes, Mail, at libu-libong third-party na app. Ang Action Extension ay hindi gumagana sa mga app na hindi gumagamit ng mga karaniwang mekanismo ng iOS para sa mga aksyon.
Sa pamamagitan ng extensionContext.completeRequest(returningItems:) na may array ng NSExtensionItem. Ang bawat elemento ng output ay naglalaman ng NSItemProvider na may naprosesong data. Ang host app ay natatanggap ang resulta sa delegate ng UIActivityViewController o katulad na callback.
Ang extension ay gumagana hanggang 30 segundo, pagkatapos ay puwersahang tatapusin ito ng iOS. Walang direktang access sa pangunahing app — sa pamamagitan lamang ng App Groups. Ang Action Extension ay hindi maaaring magsagawa ng mga background na gawain pagkatapos ng pagtatapos. Para sa mahabang operasyon, gamitin ang background na NSURLSession na may notification sa susunod na paglunsad.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din