আইফোন অ্যাপ্লিকেশন থেকে প্রস্থান করার উপযুক্ত উপায়?


277

আমি একটি আইফোন অ্যাপ্লিকেশন করছি, এবং নির্দিষ্ট ব্যবহারকারীর ক্রিয়াকলাপের কারণে আমার এটিকে প্রস্থান করতে বাধ্য করতে হবে। অ্যাপ্লিকেশন বরাদ্দ হওয়া মেমরি পরিষ্কার করার পরে, অ্যাপ্লিকেশনটি বন্ধ করার জন্য কল করার উপযুক্ত পদ্ধতিটি কী?


34
কেবলমাত্র একটি সঠিক উপায় আছে - হোম বোতাম ..
বেরিলিয়াম

5
প্রোগ্রামটিমেটিকভাবে ছাড়ার বিষয়ে যে কেউ বিবেচনা করতে পারি কেবল সেই পরিস্থিতিটি হ'ল নিম্নলিখিত দৃশ্য: অ্যাপ শুরু হয়, ব্যবহারের শর্তাদি প্রদর্শন করে, গ্রহণ করতে অস্বীকার করে অ্যাপ্লিকেশনটি ছাড়বে না। এটি এমন কিছু ব্র্যান্ড যা কখনও কখনও বিকাশকারীকে করতে চাপ দেয়। তবে এটা ভুল।
ড্যানিয়েল

6
@ ড্যানিয়েল সাধারণত আপনি অ্যাপ্লিকেশনটি আপলোড করার সময় আইটুন সংযোগের ক্ষেত্রে আপনার অস্বীকৃতি / ব্যবহারের শর্তাদি (EULA) রাখেন। যদি ব্যবহারকারী আপনার অ্যাপটি ডাউনলোড করে তবে এর অর্থ তারা আপনার EULA গ্রহণ করেছে
পল ডি ল্যাঞ্জ

8
কোনও আইওএস অ্যাপ্লিকেশন ছাড়তে বাধ্য করার জন্য সম্পূর্ণ বৈধ কারণ রয়েছে। আমার কেসটি হ'ল আমি আমার অ্যাপের প্রাক-লঞ্চ বিটা সংস্করণ বিতরণ করছি distrib বিটা সংস্করণগুলি সমস্ত আইএপি নিখরচায় খোলে। এগুলির একটি সময়সীমা রয়েছে এবং কয়েক সপ্তাহ পরে এটি শেষ হতে হবে। সুতরাং আমি বিটা পিরিয়ড শেষ হওয়ার পরে অ্যাপ্লিকেশনটি মেরে নীচের উত্তরটি ব্যবহার করছি। আমি এটি লাইভ সংস্করণে মুছে ফেলব। তবে তবুও উত্তরটি আমাকে সাহায্য করেছে এবং সঠিক!
বদওয়াসেল

5
অ্যাপ্লিকেশনটি ছাড়ার একটি বৈধ কারণ হ'ল এটি যদি দীর্ঘকালীন ব্যাকগ্রাউন্ড নির্বাহকারী অ্যাপ্লিকেশন হয় এবং অ্যাপটি এমন একটি স্থানে প্রবেশ করে যেখানে এটি আর পটভূমিতে চালানোর প্রয়োজন হয় না। উদাহরণস্বরূপ, ব্যবহারকারী লগ আউট করে। এক্ষেত্রে এটি প্রস্থান করা বুদ্ধিমান হবে যাতে পরবর্তী অ্যাপ্লিকেশনটি শুরু হয়ে গেলে এটি পরিষ্কার শুরু হয়। এটি অন্যান্য কারণে মেমরি ফাঁসের বিরুদ্ধে সুরক্ষা জাল হিসাবে কাজ করবে। দ্রষ্টব্য, এক্ষেত্রে অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডের বাইরে চলে আসবে , তাই ব্যবহারকারী কোনও ভুল দেখবেন না।
ফ্রাঙ্কোডওয়ায়ার

উত্তর:


217

আপনি চেষ্টা করেছেন exit(0)?

বিকল্পভাবে, [[NSThread mainThread] exit]যদিও আমি চেষ্টা করেছি না যে এটি আরও উপযুক্ত সমাধান বলে মনে হচ্ছে।


85
এটি করার ফলে একটি অ্যাপল নং-নন (অ-স্ট্যান্ডার্ড ইন্টারফেসের জন্য অ্যাপ্লিকেশন-স্টোরটিতে আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করতে পারে), আগস্টের উত্তরটিকে "সঠিক" হিসাবে বিবেচনা করুন। এফওয়াইআই, এই উত্তরটি (ব্রেটের) সমস্ত সি প্রোগ্রামের জন্য সঠিক, এবং সমস্ত কোকো প্রোগ্রামের জন্য এনএসথ্রেড।
অলি

21
টেক প্রশ্নোত্তর প্রশ্নোত্তর QA1561 এ, অ্যাপলটি ক্র্যাশ হয়ে গেছে বলে মনে হওয়ায় অ্যাপল প্রস্থানের ব্যবহারকে কঠোরভাবে নিরুৎসাহিত করে। বিকাশকারী.এপলস
আইফোন

8
[[এনএসটিগ্রাড মেইন থ্রেড] প্রস্থান] আপনার অ্যাপ্লিকেশনটিকে ক্র্যাশ করে তোলে, কারণ প্রস্থানটি কোনও উদাহরণ পদ্ধতি নয়। প্রস্থান (0) অ্যাপ্লিকেশনটি আইওএসের পটভূমিতে প্রেরণ করবে exit কমপক্ষে সিমুলেটারে।
ব্যবহারকারী 123444555621

10
আমি বুঝতে পারি যে এত লোক কেন এর বিরুদ্ধে পরামর্শ দিচ্ছেন, তবে কীভাবে আমাদের বিকাশকারীদের কিছুটা ক্রেডিট দেবেন? আমরা এখানে সমস্ত প্রাপ্তবয়স্ক, এবং আমরা এই বৈশিষ্ট্যটি সম্পর্কে জানতে চাই। অভ্যন্তরীণ QA বিল্ডগুলির জন্য আমি এটি খুব দরকারী বলে মনে করি এবং যখন আমি প্রথম এটি অনুসন্ধান করেছিলাম তখন এই "ভুল" উত্তরটি দেখে খুশি হয়েছিল।
ইভানফ্ল্যাশ

7
@ কেভিন "এটি করবেন না" কখনই সঠিক উত্তর নয়। আপনি যদি চান তবে সতর্কতা এবং অস্বীকৃতি দিন, তবে "আমি এটি কীভাবে করব" এর একমাত্র সঠিক উত্তর হ'ল "এখানে এটি কীভাবে করা যায়"। যদি আমি কীভাবে কীভাবে করব (সন্ধান করতে চাইলে আমি এটি ডিবাগ করার সময় এটিকে বাইরে বেরিয়ে আসতে বাধ্য করতে চাই), লোকেরা ধার্মিকতার সাথে ঘোষণা করে যে "আপনি না!" এবং আমার যে উত্তরটি প্রয়োজন তা দাফনের চেষ্টা করা আমার সময় নষ্ট করা। তবে অনেক লোকের কিছু করার খারাপ কারণ থাকতে পারে, সঠিক স্ট্যাকওভারফ্লো উত্তরটিই সেই প্রশ্নের উত্তর দেয় কারণ ভাল কারণগুলির সাথে লোকেরাও এটির জন্য তাদের পথ অনুসন্ধান করবে।
গ্লেন মেইনার্ড

274

আইফোনে কোনও অ্যাপ্লিকেশন ছাড়ার কোনও ধারণা নেই। অ্যাপ্লিকেশনটি ছেড়ে দেওয়ার একমাত্র ক্রিয়া হ'ল ফোনের হোম বোতামটি স্পর্শ করা এবং এটি বিকাশকারীদের অ্যাক্সেসের কিছু নয়।

অ্যাপলের মতে, আপনার অ্যাপ্লিকেশনটি নিজে থেকে শেষ করা উচিত নয়। যেহেতু ব্যবহারকারী হোম বোতামটিতে হিট করেনি, তাই হোম স্ক্রিনে কোনও প্রত্যাবর্তন ব্যবহারকারীকে এমন ধারণা দেয় যে আপনার অ্যাপটি ক্র্যাশ হয়ে গেছে। এটি বিভ্রান্তিকর, মানহীন আচরণ এবং এড়ানো উচিত।


13
আমি যেমন বলেছি, এটি মানহীন আচরণ এবং এড়ানো উচিত। আইফোন অ্যাপ্লিকেশনগুলি ডেস্কটপ অ্যাপ নয়। তাদের সাথে তেমন ব্যবহার করবেন না।
আগস্ট

8
আমি আপেলদের মতামত বুঝতে পারি তবে আমারও একই পরিস্থিতি রয়েছে, আমার অ্যাপ্লিকেশনটির জন্য ইন্টারনেট অ্যাক্সেস প্রয়োজন, যদি এটি উপলব্ধ না হয় তবে তারা কেবল ত্রুটি বার্তা না দিয়ে অ্যাপ্লিকেশনটি ছাড়তে সক্ষম হবে
অ্যান্থনি মেইন

22
আমাদের কাছে এমন অ্যাপস রয়েছে যা মানুষকে ঘুমাতে সহায়তা করে। ব্যাটারি ড্রেন হ্রাস করার জন্য তারা একটি নির্দিষ্ট সময়ের পরে অ্যাপটির সমাপ্তি চায়। আমি মনে করি এই মামলাটি গ্রহণযোগ্য - কারণ ব্যবহারকারী আশাবাদী ঘুমিয়ে আছেন এবং ম্যানুয়ালি অ্যাপটি থেকে বেরিয়ে আসতে পারবেন না।
জেমসসগ্রু

36
আমি এখনও একমত না। যখন তারা জেগে যায়, অ্যাপটি "চলে গেছে" ব্যবহারকারীকে অবাক করে দিয়ে কী ঘটেছে। পরিবর্তে, আপনার অ্যাপ্লিকেশনটিতে একটি টাইমার সেট করুন, তারপরে সময় শেষ হলে অ্যাপটি নিষ্ক্রিয় করুন - কোনও ক্রিয়াকলাপ নেই। একেবারে কিছুই না করে এমন একটি অ্যাপ্লিকেশন ব্যাটারি নষ্ট করে না Spring স্প্রিংবোর্ড একটি অ্যাপ্লিকেশন - এটি কেবল শক্তি সঞ্চয় করার জন্য বন্ধ করে দেয় না। পরিবর্তে, এটি কেবল ব্যবহারকারী ইনপুটটির জন্য অপেক্ষা করে।
আগস্ট

8
এটি আসলে প্রশ্নের উত্তর দেয় না। এটি 100% নির্ভুল, তবে আমি মনে করি যে আদর্শভাবেই ওপি-র প্রশ্নের বা গৃহীত উত্তরের একটি মন্তব্য হয়ে থাকতে পারে।
বেন জোটো

49

প্রস্থান (0) ক্র্যাশ হিসাবে কোনও ব্যবহারকারীর কাছে উপস্থিত হয়, সুতরাং ব্যবহারকারীর কাছে একটি নিশ্চিতকরণ বার্তা দেখান। নিশ্চিতকরণ স্থগিতের পরে (হোম বোতামটি প্রেসক্রমেটিকভাবে চাপুন) এবং অ্যাপ্লিকেশন অ্যানিমেশনের সাথে ব্যাকগ্রাউন্ডে যাওয়ার পরে 2 সেকেন্ড অপেক্ষা করুন তারপরে ব্যবহারকারীর দৃশ্যের পিছনে প্রস্থান করুন

-(IBAction)doExit
{
    //show confirmation message to user
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Confirmation"
                                                 message:@"Do you want to exit?"
                                                delegate:self
                                       cancelButtonTitle:@"Cancel"
                                       otherButtonTitles:@"OK", nil];
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex != 0)  // 0 == the cancel button
    {
        //home button press programmatically
        UIApplication *app = [UIApplication sharedApplication];
        [app performSelector:@selector(suspend)];

        //wait 2 seconds while app is going background
        [NSThread sleepForTimeInterval:2.0];

        //exit app when app is in background
        exit(0);
    }
}

1
আপেল কি এই "প্রস্থান (0)" অনুমোদন করবে? কারণ কিছু লোকেরা বলেছে যে আপনি প্রস্থান 0 ব্যবহার করার সময় অ্যাপল আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে
গজেন্দ্র কে চৌহান

2
@ গজেন্দ্র কেচৌহান exit(0)কোন ব্যাপার না। পয়েন্টটি হ'ল আপনার অ্যাপ্লিকেশনটির "ছাড়ার আচরণ" রয়েছে। খুব গুরুত্বপূর্ণ তৃতীয় পক্ষগুলি দ্বারা তৈরি করা কয়েকটি অ্যাপ্লিকেশন ব্যতীত অ্যাপস্টোরগুলিতে নিজেই ছাড়ার আচরণ নিষিদ্ধ। এছাড়াও, হোম বোতামের আচরণ অনুকরণ করাও প্রত্যাখ্যানযোগ্য।
ইওনিল

41

প্রশ্নোত্তর এখানে দেখুন: https://developer.apple.com/library/content/qa/qa1561/_index.html

প্রশ্ন: আমি কীভাবে প্রোগ্রামের মাধ্যমে আমার আইওএস অ্যাপ্লিকেশনটি ছেড়ে দেব?

আইওএস অ্যাপ্লিকেশনটি করুণভাবে শেষ করার জন্য কোনও এপিআই সরবরাহ করা হয়নি।

আইওএস-এ, ব্যবহারকারী অ্যাপ্লিকেশনগুলি বন্ধ করতে হোম বোতাম টিপেন। আপনার অ্যাপ্লিকেশনটিতে এমন কোনও শর্ত থাকতে হবে যাতে এটি তার উদ্দেশ্যযুক্ত ফাংশনটি সরবরাহ করতে পারে না, প্রস্তাবিত পদ্ধতির ব্যবহারকারীর জন্য একটি সতর্কতা প্রদর্শন করা উচিত যা সমস্যার প্রকৃতি এবং ব্যবহারকারী গ্রহণ করতে পারে এমন সম্ভাব্য পদক্ষেপগুলি নির্দেশ করে - ওয়াইফাই চালু করা, অবস্থান পরিষেবাদি সক্ষম করা ইত্যাদি etc. ব্যবহারকারীকে নিজস্ব বিবেচনার ভিত্তিতে অ্যাপ্লিকেশনটি শেষ করতে অনুমতি দিন।

সতর্কতা:exit ফাংশনটি কল করবেন না । অ্যাপ্লিকেশন কলিং exitব্যবহারকারীর কাছে ক্র্যাশ হওয়ার জন্য প্রদর্শিত হবে, বরং গ্রেফসেস টার্মিনেশন এবং হোম স্ক্রিনে অ্যানিমেট করার পরিবর্তে ras

অতিরিক্তভাবে, ডেটা সংরক্ষণ করা যায় না, কারণ -applicationWillTerminate:এবং UIApplicationDelegateযদি আপনি প্রস্থানকে কল করেন তবে অনুরূপ পদ্ধতিগুলি চাওয়া হবে না।

যদি বিকাশ বা পরীক্ষার সময় আপনার অ্যাপ্লিকেশনটি সমাপ্ত করা প্রয়োজন হয়, তবে abortফাংশন বা assertম্যাক্রো বাঞ্ছনীয়


2
এটি মেনে চলার জন্য বোতাম ছাড়া সবেমাত্র একটি অ্যালার্টভিউ যুক্ত করা হয়েছে। সহজ।
Schultz9999

দুর্দান্ত উত্তর, সবেমাত্র প্রস্থান (0) দিয়ে কাজ করেছেন এবং জানেন না যে এটি ব্যক্তিগত এপিআই-এর সাথে সম্পর্কিত
অ্যালেক্স সিও

39

এটি প্রোগ্রামটি ছাড়ার কোনও উপায় নয়, মানুষকে ছাড়তে বাধ্য করার উপায়।

UIAlertView *anAlert = [[UIAlertView alloc] initWithTitle:@"Hit Home Button to Exit" message:@"Tell em why they're quiting" delegate:self cancelButtonTitle:nil otherButtonTitles:nil];
[anAlert show];

2
কমপক্ষে সিমুলেটারে, আপনি যদি এটি করেন, ব্যবহারকারী যখন অ্যাপটি আবার খুলবে তখন সতর্কতাটি তখনও থাকবে। সুতরাং, আমি তাদের কমপক্ষে একটি বোতাম দেওয়ার পরামর্শ দিই।
চিশিরেকো

কল্যাণের উত্তরটি ব্যবহার করুন যাতে হোম বোতাম টিপলে অ্যাপটি সরে যায়।
তৈমুর কুচকারভ

এটির সাথে সমস্যাটি হ'ল এটি আসলে অ্যাপ্লিকেশন থেকে প্রস্থান করে না, সুতরাং বিকাশকারী বাইরে বেরিয়ে কিছু সম্পাদন করতে চায় (অবৈধ / পুরাতন ইউআই, ক্লিয়ারিং কনস্ট্যান্টস, ইত্যাদি) ব্যবহার করা হবে না যতক্ষণ না ব্যবহারকারী অ্যাপ্লিকেশনটিকে সোয়াইপ করে না বন্ধ করে দেয়।
বেন লেগিগেরো

এটি অ্যাপটিকে হত্যা করে না kill
ডাস্টিন

38

আপনার তথ্য.পুলিস্টে যান এবং "অ্যাপ্লিকেশনটি পটভূমিতে চলে না" কীটি পরীক্ষা করুন। এবার যখন ব্যবহারকারী হোম বোতামটি ক্লিক করেন, অ্যাপ্লিকেশনটি পুরোপুরি বাইরে চলে আসে।


1
তবে পটভূমি প্রক্রিয়াটিও বরখাস্ত হয়।
গজেন্দ্র কে চৌহান

17

যোগ UIApplicationExitsOnSuspendউপর সম্পত্তি application-info.plistথেকে true


রান-টাইমে কি এই সেটিংটি পরিবর্তন করা যেতে পারে? আমার অর্থ, আমি আমার অ্যাপ্লিকেশন পরবর্তী সাসপেন্ডে ছেড়ে যাওয়া বেছে নেওয়া বাদ দিলে - ব্যাকগ্রাউন্ডে থাকতে চাই - এই সময়ে আমি ইউআইএপ্লিকেশনএক্সিটসসপেন্ড উপস্থাপন করতে চাই। এটা কি সম্ভব?
মোটি শ্নের

13

কিছু পরীক্ষার পরে, আমি নিম্নলিখিতটি বলতে পারি:

  • ব্যক্তিগত ইন্টারফেস ব্যবহার করে: [UIApplication sharedApplication]অ্যাপ্লিকেশনটিকে ক্র্যাশ হওয়ার মতো দেখায় কারণ এটি করার - (void)applicationWillTerminate:(UIApplication *)applicationআগে এটি কল করবে ;
  • exit(0);ব্যবহারটি অ্যাপ্লিকেশনটিও বন্ধ করে দেবে, তবে এটি "স্বাভাবিক" দেখায় (স্প্রিংবোর্ডের আইকনগুলি প্রত্যাশার মতো দেখাবে, জুম আউট প্রভাবের সাথে), তবে এটি - (void)applicationWillTerminate:(UIApplication *)applicationডেলিগেট পদ্ধতিটিকে কল করবে না ।

আমার উপদেশ:

  1. - (void)applicationWillTerminate:(UIApplication *)applicationপ্রতিনিধিটিকে ম্যানুয়ালি কল করুন ।
  2. কল করুন exit(0);

অ্যাপল বলেছে যে "অ্যাপ্লিকেশন কলিং প্রস্থানটি ব্যবহারকারীর কাছে ক্র্যাশ হয়ে উঠার পরিবর্তে, গ্রেফিউস টার্মিনেশন সম্পাদন করে এবং হোম স্ক্রিনে অ্যানিমেট করার পরিবর্তে প্রদর্শিত হবে" ডেভেলপার.অ্যাপল.
মিকিডি

8

আপনার অ্যাপ্লিকেশনডেলিগেট ব্যবহারকারী দ্বারা ইচ্ছাকৃত ছাড়ার বিষয়ে বিজ্ঞপ্তি পেয়েছে:

- (void)applicationWillResignActive:(UIApplication *)application {

আমি যখন এই বিজ্ঞপ্তিটি পেয়েছি তখন আমি কেবল কল করি

        exit(0);

যা সব কাজ করে। এবং সর্বোত্তম জিনিসটি হ'ল এটি ছাড়ার প্রবণতা, যার কারণেই এটি সেখানে ডাকতে সমস্যা হওয়া উচিত নয়।

আমার অডিও-অ্যাপে সংগীত বাজানোর সময় লোকেরা তাদের ডিভাইস সিঙ্ক করার পরে অ্যাপটি ত্যাগ করা দরকার ছিল। সিঙ্কিংটি শেষ হওয়ার সাথে সাথে আমি একটি বিজ্ঞপ্তি পাই। তবে ঠিক তার পরে অ্যাপ্লিকেশনটি ছেড়ে দেওয়া আসলে ক্র্যাশের মতো দেখায়।

সুতরাং এর পরিবর্তে আমি পরবর্তী পটভূমি ক্রিয়াকলাপটিতে অ্যাপ্লিকেশনটি প্রস্থান করতে সত্যিই একটি পতাকা সেট করেছি। সিঙ্কের পরে অ্যাপটি রিফ্রেশ করার জন্য যা ঠিক আছে।


1
এটি কোনও ভাল সমাধান নয় কারণ আগত ফোন কলের মতো অন্যান্য কারণে অ্যাপ্লিকেশনটি সক্রিয় পদত্যাগ করবে।
স্প্যানকোডায়ায়ার

সমাধানটি হ'ল এমন একটি চেক যুক্ত করা যা কেবলমাত্র এটির জন্য কার্যকর হলেই প্রস্থান করে। উদাহরণস্বরূপ যদি ব্যবহারকারী স্টার্ট স্ক্রিনে থাকে। তারপরে কোনও ফোনকল আসছে কিনা তা ঠিক আছে Apple stackoverflow.com/a/43906936/712124
বিড়াল

6

আমার অ্যাপটি সম্প্রতি প্রত্যাখ্যান করা হয়েছে খ্রিস্টাব্দে আমি একটি অননুমোদিত পদ্ধতি ব্যবহার করেছি। শাব্দিক অনুবাদ

"দুর্ভাগ্যক্রমে এটি অ্যাপ স্টোরটিতে যুক্ত করা যায় না কারণ এটি একটি প্রাইভেট এপিআই ব্যবহার করছে। আইফোন বিকাশকারী প্রোগ্রাম লাইসেন্স চুক্তি বিভাগের ৩.৩.১ তে বর্ণিত নন-পাবলিক এপিআই ব্যবহার নিষিদ্ধ:

"৩.৩.১ অ্যাপ্লিকেশনগুলি কেবল অ্যাপল দ্বারা নির্ধারিত পদ্ধতিতে ডকুমেন্টেড এপিআই ব্যবহার করতে পারে এবং কোনও প্রাইভেট এপিআই ব্যবহার করতে বা কল করতে হবে না।"

আপনার অ্যাপ্লিকেশনটিতে অন্তর্ভুক্ত থাকা অ-সর্বজনীন এপিআই হ'ল সমাপ্তি উইথসাক্সেস "


6

অ্যাপল বলে:

"সতর্কতা: প্রস্থান ফাংশনটি কল করবেন না Applications অ্যাপ্লিকেশন কলিং প্রস্থানটি ব্যবহারকারীর কাছে ক্রেস্ট হয়ে উঠবে, করুণ সমাপ্তি সম্পাদন করার পরিবর্তে এবং হোম স্ক্রিনে অ্যানিমেট করার পরিবর্তে।"

আমি মনে করি এটি খারাপ ধারণা is যদি ব্যবহারকারী একটি প্রস্থান বোতামটি ট্যাপ করেন এবং এমন কোনও বার্তা উপস্থিত হয় যাতে এর মতো কিছু বলা হয়: "অ্যাপ্লিকেশনটি এখন প্রস্থান করবে" ", এটি ক্র্যাশ হয়ে যায় বলে মনে হয় না। অ্যাপল একটি অ্যাপ্লিকেশন ছাড়ার জন্য একটি বৈধ উপায় প্রদান করা উচিত (প্রস্থান (0) নয়)


3
তারা এটিকে হোম বোতামটি কল করে এটি কোনও আইডিভাইসের নীচে অবস্থিত হতে পারে। তাই এই নিয়ে সেখানে কখনো কোনো আপনার নিজের প্রস্থান বাটন নির্মাণ করা প্রয়োজন, কারণ।
Popeye

4

এটি একটি ভাল উত্তর পেয়েছে তবে কিছুটা প্রসারিত করার সিদ্ধান্ত নিয়েছে:

অ্যাপলের আইওএস হিউম্যান ইন্টারফেস গাইডলাইনগুলি ভালভাবে না পড়ে আপনি অ্যাপ্লিকেশনটিতে অ্যাপ্লিকেশন গ্রহণ করতে পারবেন না। (তাদের বিরুদ্ধে কিছু করার জন্য তারা আপনাকে প্রত্যাখ্যান করার অধিকার বজায় রেখেছে ) বিভাগ "প্রোগ্রামিমেটিকালি ছেড়ে দেবেন না" বিভাগটি " http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Concepual/MobileHIG/UEBestPractices/UEBestPractices " এই ক্ষেত্রে আপনার কীভাবে আচরণ করা উচিত এইচটিএমএল একটি সঠিক নির্দেশিকা guid

আপনার যদি কখনও অ্যাপল প্ল্যাটফর্মের সমস্যা হয় তবে আপনি সহজেই এর সমাধান খুঁজে পেতে পারেন না, এইচআইজি-র পরামর্শ নিন। এটি সম্ভবত সম্ভব অ্যাপল চায় না যে আপনি এটি করেন এবং তারা সাধারণত (আমি অ্যাপল নই তাই আমি সবসময় গ্যারান্টি দিতে পারি না) তাদের ডকুমেন্টেশনে এটি বলে say


3

এইচএম, আপনার অ্যাপ্লিকেশনটির জন্য ইন্টারনেট সংযোগের প্রয়োজন থাকলে, আপনাকে অ্যাপ্লিকেশনটি 'ছাড়তে' হতে পারে। আপনি একটি সতর্কতা প্রদর্শন করতে পারেন এবং তারপরে এমন কিছু করতে পারেন:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(terminate)]) {
    [[UIApplication sharedApplication] performSelector:@selector(terminate)];
} else {
    kill(getpid(), SIGINT); 
}

9
না, আপনাকে এটি শেষ করতে হবে না। আইটিউনস অ্যাপ্লিকেশন, উদাহরণস্বরূপ, যখন এটি কোনও সঠিক সংযোগ সনাক্ত করতে পারে না তখন কেবল একটি স্ক্রিন রাখে যা বলে যে তারা সংযুক্ত নয়। এটি প্রস্থান করে না, এটি সহজে কী ঘটছে তা ব্যবহারকারীকে অবহিত করে। ব্যবহারকারী তখন হোম বোতামটি আলতো চাপ দিয়ে প্রস্থান করে।
আগস্ট

1
যদিও এটি কাজ করতে অক্ষম থাকলে কম্পাস অ্যাপটি প্রস্থান করে।
জোশ লি

3

অ্যাপল এই ফাংশনগুলির ব্যবহারকে কঠোরভাবে নিরুৎসাহিত করার কারণে আমরা অ্যাপ্লিকেশন exit(0), abort()ফাংশনগুলি ব্যবহার করে অ্যাপটি ছাড়তে পারি না । যদিও আপনি এই ক্রিয়াগুলি বিকাশ বা পরীক্ষার উদ্দেশ্যে ব্যবহার করতে পারেন।

বিকাশ বা পরীক্ষার সময় যদি আপনার অ্যাপ্লিকেশনটি সমাপ্ত করা প্রয়োজন, তবে গর্ভপাত বন্ধন কার্য, বা ম্যাক্রোর প্রতিস্থাপন করার পরামর্শ দেওয়া হয়

আরও তথ্য পেতে দয়া করে এই অ্যাপল প্রশ্নোত্তর থ্রেডটি সন্ধান করুন।

এই ফাংশনটির ব্যবহারের ফলে অ্যাপ্লিকেশন ক্র্যাশ হওয়ার মতো ছাপ তৈরি করুন। সুতরাং আমি কিছু পরামর্শ পেয়েছি যেমন অ্যাপ্লিকেশনটি বন্ধ করার বিষয়ে সচেতন ব্যবহারকারীর কাছে নির্দিষ্ট কার্যকারিতার অভাবের কারণে আমরা সমাপ্তির বার্তা সহ সতর্কতা প্রদর্শন করতে পারি।

তবে অ্যাপ্লিকেশন শুরু এবং বন্ধ করার জন্য আইওএস হিউম্যান ইন্টারফেস গাইডলাইনটি পরামর্শ দেয় যে অ্যাপ্লিকেশনটি বন্ধ করতে কখনই প্রস্থান বা বন্ধ বোতামটি ব্যবহার করবেন না । তারপরে তারা পরিস্থিতি ব্যাখ্যা করতে সঠিক বার্তা প্রদর্শন করার পরামর্শ দিচ্ছেন।

কোনও আইওএস অ্যাপ কখনই বন্ধ বা প্রস্থান বিকল্প প্রদর্শন করে না। লোকেরা যখন কোনও অ্যাপ্লিকেশন ব্যবহার বন্ধ করে দেয় যখন তারা অন্য অ্যাপ্লিকেশনটিতে চলে যায়, হোম স্ক্রিনে ফিরে আসে বা তাদের ডিভাইসগুলি স্লিপ মোডে রাখে।

প্রোগ্রামযুক্তভাবে কোনও আইওএস অ্যাপ্লিকেশনটি কখনও ছাড়বেন না। লোকেদের এটি ক্র্যাশ হিসাবে ব্যাখ্যা করার প্রবণতা রয়েছে। যদি আপনার অ্যাপ্লিকেশনটিকে উদ্দেশ্য হিসাবে কাজ করা থেকে বাধা দেয় তবে আপনাকে ব্যবহারকারীদের পরিস্থিতি সম্পর্কে জানাতে হবে এবং তারা এটি সম্পর্কে কী করতে পারে তা ব্যাখ্যা করতে হবে।


2

উপরেরগুলি ছাড়াও, ভাল, উত্তর আমি কেবল যুক্ত করতে চেয়েছিলাম, আপনার স্মৃতি পরিষ্কার করার বিষয়ে ভাবুন।

আপনার অ্যাপ্লিকেশনটি প্রস্থান করার পরে, আইফোন ওএস আপনার অ্যাপ্লিকেশন পিছনে থাকা সমস্ত কিছু স্বয়ংক্রিয়ভাবে পরিষ্কার করবে, সুতরাং সমস্ত মেমরি ম্যানুয়ালি মুক্ত করা আপনার অ্যাপ্লিকেশনটি প্রস্থান করতে সময় নিতে পারে এমন পরিমাণ বাড়িয়ে তুলতে পারে।


আইওএস ৪.০ এবং ইউপির বর্তমান দৃশ্যে আপনার উত্তরটি পরিবর্তন করুন ..: পি
rptwsthi

2
- (IBAction)logOutButton:(id)sender
{
   //show confirmation message to user
   CustomAlert* alert = [[CustomAlert alloc] initWithTitle:@"Confirmation" message:@"Do you want  to exit?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
   alert.style = AlertStyleWhite;
   [alert setFontName:@"Helvetica" fontColor:[UIColor blackColor] fontShadowColor:[UIColor clearColor]];
   [alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

   if (buttonIndex != 0)  // 0 == the cancel button
   {
      //home button press programmatically
      UIApplication *app = [UIApplication sharedApplication];
      [app performSelector:@selector(suspend)];
      //wait 2 seconds while app is going background
      [NSThread sleepForTimeInterval:2.0];
      //exit app when app is in background
      NSLog(@"exit(0)");
      exit(0);
  }
}

1

আমি টপ-ট্যল প্রস্থান (0) ফাংশন কল না করে অ্যাপটিকে জোর করে ছেড়ে দিতে (ক্র্যাশ করতে) উপরে উল্লিখিত [[NSMutableArray new] addObject: nil] পদ্ধতির ব্যবহার করেছি।

কেন? কারণ আমার অ্যাপ্লিকেশনটি ম্যান-ইন-মধ্য-আক্রমণের প্রতিরোধ করতে সমস্ত নেটওয়ার্ক API কলগুলিতে শংসাপত্র পিনিং ব্যবহার করে। এর মধ্যে আমার আর্থিক অ্যাপ্লিকেশনটি প্রারম্ভকালে শুরু করা কল অন্তর্ভুক্ত রয়েছে।

যদি শংসাপত্র প্রমাণীকরণ ব্যর্থ হয়, আমার সমস্ত সূচনা কলকে ত্রুটিযুক্ত করে এবং আমার অ্যাপটিকে একটি অনির্দিষ্ট অবস্থায় ছেড়ে দেয়। ব্যবহারকারীকে বাড়িতে যেতে এবং তারপরে অ্যাপ্লিকেশনটিতে ফিরে যেতে সহায়তা করে না, যতক্ষণ না অ্যাপটি ওএস দ্বারা শুদ্ধ না করা হয় এটি এখনও অবিশ্বাস্য এবং অবিশ্বাস্য।

সুতরাং, এই এক ক্ষেত্রে, আমরা ব্যবহারকারীকে জানিয়ে একটি সতর্কতা পপ করা ভাল বলে মনে করেছি যে অ্যাপটি কোনও অনিরাপদ পরিবেশে কাজ করছে এবং তারপরে, তারা "ক্লোজ" চাপলে, উপরোক্ত পদ্ধতিটি ব্যবহার করে অ্যাপটি ছেড়ে দিতে বাধ্য করুন।


আমি দেখতে পাচ্ছি না যে আপনাকে একটি একক পূর্ণ-স্ক্রিন জাগ্রত সতর্কতা প্রদর্শন করা থেকে, ব্যবহারকারীকে বলছে যে অ্যাপ্লিকেশনটি "শংসাপত্র পিনিং" কারণগুলির জন্য ব্যবহারযোগ্য নয়, এবং এটিই। ব্যবহারকারী শেষ পর্যন্ত অ্যাপটি বন্ধ করে দেবে। আপনি হয়ত জানেন না, তবে আইওএস আপনার প্রক্রিয়াটি (এটির অবস্থা বজায় রাখা) হত্যা এবং পরে পুনরুদ্ধার করার অধিকার সংরক্ষণ করে এবং আইওএস অ্যাপ্লিকেশনটির "জীবনচক্র" সত্যই আপনার হাতে নেই hands আপনার ক্র্যাশ - কেবল একটি ক্র্যাশ এবং ওএস অ্যাপ্লিকেশনটিকে যেকোনভাবে পুনরুদ্ধার করতে পারে।
মোটি শ্নের

বাহ, তিন বছরের পুরানো পোস্ট যাইহোক, নতুন অ্যাপ্লিকেশন আর্কিটেকচারটি এটির অনেক কিছুই করে, একটি পুনরায় চেষ্টা বোতামের সাহায্যে যা এপিআই পুনরায় চেষ্টা করে এবং হয় ব্লক স্ক্রিনটি ফেলে দেয় বা একটি নতুন ত্রুটির সাথে তাদের ব্লক স্ক্রিনে ফিরিয়ে দেয়।
মাইকেল লং

পুরানো অ্যাপ স্ট্রাকচারটি স্টার্টআপ এপিআই কলগুলিতে পুনরায় চেষ্টা করার কোনও ভাল উপায়ের অনুমতি দেয় নি এবং অ্যাপগুলি সেগুলি ব্যতীত বেমানান অবস্থায় রয়েছে। আমরা একটি স্থায়ী ব্লক স্ক্রিন ব্যবহার করতে পারতাম, তবে এর জন্য ব্যবহারকারীকে নিজেই অ্যাপটি জোর করে ছেড়ে দিতে হবে এবং সিদ্ধান্ত নেওয়া হয়েছিল যে প্রতিটি ব্যবহারকারী অ্যাপ্লিকেশনগুলিকে ডাবল-ক্লিক এবং জোর করে কীভাবে জানেন না not আজ সহজ তবে তিন বছর আগে বেশ গোপন।
মাইকেল লং

1
[[UIApplication sharedApplication] terminateWithSuccess];

এটি ভাল কাজ করেছে এবং স্বয়ংক্রিয়ভাবে কল করে

- (void)applicationWillTerminateUIApplication *)application delegate.

সংকলন সময় সতর্কতা অপসারণ এই কোড যুক্ত করুন

@interface UIApplication(MyExtras)
  - (void)terminateWithSuccess;
@end 

5
এটি একটি ব্যক্তিগত পদ্ধতি, ডিয়েগো মার্কাডো উপরে ব্যাখ্যা করেছেন যে তার অ্যাপটি বাতিল হয়ে গেছে, তবে কেন এমন ঝুঁকি নেওয়া উচিত।
আরভিএন

অ্যাপল দ্বারা প্রত্যাখ্যান করা অ্যাপ্লিকেশনটি প্রাইভেট এপিআই ব্যবহার করবে।
ZYiOS

2
এন্টারপ্রাইজ অ্যাপ্লিকেশানের জন্য - এটি সমাধান হতে পারে।
ব্যবহারকারী 1140780

- (আইবিএક્શન) প্রস্থানস্থান: (আইডি) প্রেরক {এসইএল নির্বাচনকারী = এনএসইলেক্টরফ্র্যামস্ট্রিং (@ "টার্মিনেট উইথসুকসেস"); [স্ব-সম্পাদনা নির্বাচনকারী: নির্বাচক সাথে অবজেক্ট: [ইউআইএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন]]; }
আনম

@ উমিরেসিয়া কি সেই পাস পর্যালোচনা করেছে?
দুর্দান্ত-ও

1

আপনার সরাসরি ক্রিয়াকলাপটি কল করা উচিত নয় exit(0)কারণ এটি অবিলম্বে অ্যাপ্লিকেশনটি প্রস্থান করবে এবং আপনার অ্যাপ্লিকেশনটি ক্র্যাশ হয়ে যাওয়ার মতো দেখাবে। ব্যবহারকারীদের একটি নিশ্চিতকরণ সতর্কতা দেখানো আরও ভাল এবং তাদের এটি নিজেরাই করতে দিন।

সুইফট 4.2

func askForQuit(_ completion:@escaping (_ canQuit: Bool) -> Void) {
    let alert = UIAlertController(title: "Confirmation!", message: "Do you want to quit the application", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "Yes", style: UIAlertAction.Style.default, handler: { (action) in
        alert.dismiss(animated: true, completion: nil)
        completion(true)
    }))
    alert.addAction(UIAlertAction(title: "No", style: UIAlertAction.Style.cancel, handler: { (action) in
        alert.dismiss(animated: true, completion: nil)
        completion(false)
    }))
    self.present(alert, animated: true, completion: nil)
}

/// Will quit the application with animation
func quit() {
    UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
    /// Sleep for a while to let the app goes in background
    sleep(2)
    exit(0)
}

ব্যবহার:

self.askForQuit { (canQuit) in
     if canQuit {
         self.quit()
     }
}

0

কোনও অ্যাপ কখন প্রস্থান করবে তা ব্যবহারকারীর সিদ্ধান্ত নেওয়া উচিত। আমি মনে করি না যে কোনও অ্যাপ্লিকেশন প্রস্থান করলে এটি একটি ভাল ব্যবহারকারীর ইন্টারঅ্যাকশন। সুতরাং এটির জন্য কোনও দুর্দান্ত এপিআই নেই, কেবলমাত্র হোম বোতামটিতে একটি রয়েছে।

যদি কোনও ত্রুটি থাকে: এটিকে আরও কার্যকর করুন বা ব্যবহারকারীকে জানান ify যদি আবার পুনঃসূচনা করতে হয়: ব্যবহারকারীকে জানানোর চেয়ে এটি আরও কার্যকর করুন।

এটি বোবা লাগছে, তবে ব্যবহারকারীকে সিদ্ধান্ত না দেওয়া এবং তাকে অবহিত না করে অ্যাপটি থেকে বেরিয়ে আসা খারাপ অভ্যাস। এবং যেহেতু ব্যবহারকারীর কথোপকথনের জন্য একটি হোম বোতাম রয়েছে, অ্যাপল জানিয়েছে, একই ফাংশনের জন্য দুটি জিনিস থাকা উচিত নয় (একটি অ্যাপ্লিকেশনটি প্রস্থান করা হচ্ছে)।


0

হোম বোতাম ব্যতীত অন্য কোনও অ্যাপ থেকে প্রস্থান করা সত্যিই নন-আইওএস-এস্কো পদ্ধতির।

যদিও আমি এই সহায়কটি কোনও ব্যক্তিগত জিনিস ব্যবহার করি না:

void crash()
{ [[NSMutableArray new] addObject:NSStringFromClass(nil)]; }

তবে এখনও আমার ক্ষেত্রে উত্পাদনের উদ্দেশ্যে নয়। এটি ক্র্যাশ রিপোর্টিং পরীক্ষা করার জন্য, বা কোনও কোর ডেটা রিসেটের পরে দ্রুত পুনঃসূচনা করার জন্য। সবেমাত্র এটিকে নিরাপদ করে দিয়েছে যদি উত্পাদন কোডে ফাংশনটি ছেড়ে যায় তবে তা প্রত্যাখ্যান না করা।


0

সুইফট ৪.২ (বা আরও পুরানো)

নামক লাইব্রেরি Darvinব্যবহার করা যেতে পারে।

import Darwin

exit(0) // Here you go

এনবি: আইওএস অ্যাপ্লিকেশনগুলিতে এটি পুনরুদ্ধার করা হয় না।

এটি করলে আপনার ক্রাশ লগ হবে।


0

আইপ্যাডএস 13 এ আপনি এখন সমস্ত দৃশ্য সেশন বন্ধ করতে পারেন:

for session in UIApplication.shared.openSessions {
    UIApplication.shared.requestSceneSessionDestruction(session, options: nil, errorHandler: nil)
}

এই কল করবে applicationWillTerminate(_ application: UIApplication) আপনার অ্যাপের প্রতিনিধিকে এবং অ্যাপটি শেষ পর্যন্ত শেষ করবে।

তবে দুটি বিষয় থেকে সাবধান থাকুন:

আইওএস / আইপ্যাডএস 13 এ দৃশ্য সম্পর্কে আরও তথ্য: https://developer.apple.com/docamentation/uikit/app_and_en পরিবেশ /scenes


-1

অন্যভাবে কোনও অ্যাপ থেকে প্রস্থান করুন

যদিও আমি এই সহায়কটি কোনও ব্যক্তিগত জিনিস ব্যবহার করি না:

থেকে প্রস্থান করুন (0);


-1

এটা তোলে যদি এটি একটি চিরায়ু অ্যাপ্লিকেশন যে পটভূমিতে executes হয় একটি অ্যাপ্লিকেশন থেকে প্রস্থান করার জন্য, উদাহরণস্বরূপ অবস্থান আপডেট (ব্যবহার পেতে জন্য উপযুক্ত হতে পারে আপডেটেড অবস্থান ব্যাকগ্রাউন্ড ক্ষমতা ব্যবহার করে)।

উদাহরণস্বরূপ, আসুন আমরা বলি যে ব্যবহারকারী আপনার অবস্থান ভিত্তিক অ্যাপ্লিকেশনটি লগ আউট করে এবং হোম বোতামটি ব্যবহার করে অ্যাপটিকে ব্যাকগ্রাউন্ডে ঠেলে দেয়। এক্ষেত্রে আপনার অ্যাপটি চালিয়ে যেতে পারে তবে এটি সম্পূর্ণরূপে প্রস্থান করা বুদ্ধিমান হতে পারে। এটি ব্যবহারকারীর পক্ষে ভাল হবে (মেমরি এবং অন্যান্য সংস্থানগুলি ব্যবহার করার দরকার নেই) এবং অ্যাপের স্থিতিশীলতার জন্য ভাল (যেমন নিশ্চিত হওয়া যায় যে অ্যাপটি যখন সম্ভব হয় তখন সময়ে সময়ে পুনরায় চালু হয় মেমরি ফাঁস এবং অন্যান্য লো মেমোরির বিরুদ্ধে সুরক্ষা জাল) সমস্যা)।

এটি (যদিও সম্ভবত না হওয়া উচিত, নীচে দেখুন :-) এমন কিছু দিয়ে অর্জন করা যেতে পারে:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    if (/* logged out */) {
        exit(0);
    } else {
       // normal handling.
    }
}

যেহেতু অ্যাপ্লিকেশনটি তখন পটভূমির বাইরে চলে যাবে এটি ব্যবহারকারীর কাছে এটি ভুল দেখায় না, এবং ক্র্যাশের অনুরূপ হবে না, পরবর্তীতে অ্যাপ্লিকেশন চালানোর পরে ব্যবহারকারীর ইন্টারফেসটি পুনরুদ্ধার করা হবে। অন্য কথায়, ব্যবহারকারীর কাছে অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় অ্যাপটিকে সমাপ্তির শুরু করা কোনও সিস্টেমের থেকে আলাদা মনে হবে না।

তবুও, সিস্টেমটি জানাতে যে অ্যাপটি শেষ করা যেতে পারে তার জন্য আরও মানক পদ্ধতির ব্যবহার করা ভাল। উদাহরণস্বরূপ, এক্ষেত্রে, জিপিএস ব্যবহারের প্রয়োজন নেই তা নিশ্চিত করে অবস্থানের আপডেটগুলি অনুরোধ করা, যদি উপস্থিত থাকে তবে মানচিত্রের ভিউতে বর্তমান অবস্থান প্রদর্শন বন্ধ করে। এই পদ্ধতিতে [[UIApplication sharedApplication] backgroundTimeRemaining]অ্যাপটি ব্যাকগ্রাউন্ডে প্রবেশের কয়েক মিনিট (অর্থাত্ ) অ্যাপ্লিকেশনটি সমাপ্ত করার যত্ন নেবে । এটি অ্যাপ্লিকেশনটি বন্ধ করতে কোড ব্যবহার না করেই একই রকম সুবিধা পাবে।

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    if (/* logged out */) {
       // stop requesting location updates if not already done so
       // tidy up as app will soon be terminated (run a background task using beginBackgroundTaskWithExpirationHandler if needed).
    } else {
       // normal handling.
    }
}

এবং অবশ্যই, exit(0)অন্য উত্তরগুলির হিসাবে, অগ্রণীতে পরিচালিত গড় উত্পাদনের অ্যাপ্লিকেশনটির জন্য কখনই উপযুক্ত হবে না যে উল্লেখটি http://developer.apple.com/iphone/library/qa/qa2008/qa1561.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.