Как добавить мое приложение к акции

Я пытаюсь добавить свое приложение в общий доступ. Если вы посмотрите фотографию и нажмете кнопку "Поделиться", вы увидите Facebook Twitter...

Недавно я скачал несколько приложений из магазина, и они также появились в общем доступе, так что я полагаю, что это возможно каким-то образом.

Является ли это возможным? Если так, как

Чем этот вопрос не является

  1. Это не просто обмен данными между приложениями, которые вы создали. Обычно для этой цели используется настраиваемая схема URL, но только когда ваш источник данных знает, как использовать настраиваемую схему. Но этот вопрос о том, как подготовить ваше приложение для стороннего приложения (например, фотографий), чтобы поделиться с вами стандартным контентом (фотографии, фильмы и т. Д.).

  2. Речь идет не о том, как подготовить свой контент для публикации, например, на Facebook или Twitter. Вместо этого он спрашивает, как написать собственное приложение, подобное Facebook, чтобы он мог принимать акции

2 ответа

Обновлено для XCode 10, Swift 4.2

Да, это возможно.


Создать расширение

В вашем XCode перейдите на File -> New -> Target затем выберите Share Extension,

В вашем проекте будет создана папка и файл с расширением.appex.

Папка будет содержать

Extension Name  --------- ShareViewController.swift
               |
                -------- Maininterface.storyboard 
               |
                -------- Info.plist

Добавить поддержку для типа элемента

В этом листе укажите правильные расширения, которыми ваше приложение может поделиться *.

<key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>10</integer>
            <key>NSExtensionActivationSupportsMovieWithMaxCount</key>
            <integer>1</integer>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
        </dict>
    </dict>

Методы делегирования

ShareViewController содержимое файла

    override func isContentValid() -> Bool {
            // Do validation of contentText and/or NSExtensionContext attachments here
            return true
    }

    override func didSelectPost() {
             // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.

            // Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context.
                self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
    }

    override func configurationItems() -> [Any]! {
            // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
                return []
    }

Поделиться постом с вашей стороны

Ты почти там. Передайте выбранный элемент в ваше приложение из disSelectPost. Вы можете использовать внешний код ниже

- ( void ) passSelectedItemsToApp
{
    NSExtensionItem * item = self.extensionContext.inputItems.firstObject;

    // Reset the counter and the argument list for invoking the app:
    m_invokeArgs = NULL;
    m_inputItemCount = item.attachments.count;

    // Iterate through the attached files
    for ( NSItemProvider * itemProvider in item.attachments )
    {
        // Check if we are sharing a JPEG
        if ( [ itemProvider hasItemConformingToTypeIdentifier: ( NSString * ) kUTTypeJPEG ] )
        {
            // Load it, so we can get the path to it
            [ itemProvider loadItemForTypeIdentifier: ( NSString * ) kUTTypeJPEG
                                             options: NULL
                                   completionHandler: ^ ( UIImage * image, NSError * error )
             {
                 static int itemIdx = 0;

                 if ( NULL != error )
                 {
                     NSLog( @"There was an error retrieving the attachments: %@", error );
                     return;
                 }

                 // The app won't be able to access the images by path directly in the Camera Roll folder,
                 // so we temporary copy them to a folder which both the extension and the app can access:
                 NSString * filePath = [ self saveImageToAppGroupFolder: image imageIndex: itemIdx ];

                 // Now add the path to the list of arguments we'll pass to the app:
                 [ self addImagePathToArgumentList: filePath ];

                 // If we have reached the last attachment, it's time to hand control to the app:
                 if ( ++itemIdx >= m_inputItemCount )
                 {
                     [ self invokeApp: m_invokeArgs ];
                 }
             } ];
        }
    }
}

Также убедитесь, что у вас есть расширение, включенное в ваш файл.ipa. Открыв его с помощью.zip трюка.


Отладка вашего расширения

Для отладки вашего расширения с помощью приложения фотографий, как вы сказали. Вы можете использовать метод присоединения к процессу. * шаги

1) Приложение Open Photos

2) Присоедините ваше расширение к xcode, используя PID или имя процесса.

3) Поделитесь картинкой или видео с вашим приложением.

4) Приложение попадет в метод didSelectPost.

* Документация Apple

@kemdo, если ваше приложение все еще невидимо - попробуйте нажать на многоточие, тогда вы увидите свое приложение и переключитесь рядом с ним. это помогло мне в моем случае с симулятором.

Другие вопросы по тегам